fopen( "   ", "w" );
上記の関数によって書きこむファイル名を変数で設定するにはどうすれば良いですか?

例えばiとjと言う変数があった場合、i_j.csvをファイル名としたいです。(iとjを変数とします。)
ご存知の方がいましたら、教えてください。

A 回答 (2件)

変数の値からファイル名を作る方法はいくつかあります。


i,jが整数型だとして、

char fname[50];
sprintf(fname,"%d_%d,csv",i,j) ;
fopen(fname,"w");

等。

「変数名」をファイル名にしたい、となるとマクロつかうとかでしょうか。
もっとも、「変数名」は変わらないので、直接書いてしまえばいいだけのこと。
    • good
    • 1
この回答へのお礼

うまくいきました。ありがとうございました。

お礼日時:2011/04/19 16:04

> 例えばiとjと言う変数があった場合、i_j.csvをファイル名としたいです。

(iとjを変数とします。)

iとjが変数の値に置き換わるイメージでしょうか?それとも変数名そのものをファイル名にしたいのでしょうか?

前者であれば、#1の方のやり方になりますし、後者であれば、
#define FNAME(a, b) #a "_" #b ".csv"
と言うマクロを作っておいて

fopen(FNAME(i,j), "w");

でしょうか。
    • good
    • 0
この回答へのお礼

なるほど、こういうやりかたもあるんですね

お礼日時:2011/04/19 16:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォルダ内で、一致するファイル名の数を表示してフォルダ名を修正してくれるソフト

 はじめまして。
 ベクターでソフト探したのですが見つかりませんでした。知っている方いらっしゃいましたらお願いします。

○やりたいこと
1、フォルダ内でファイル名を検索(例えばyoshioフォルダ内の「出張」)
2、条件に当てはまるファイル数を表示(△○件)
3、そのフォルダ名を変更(yoshioのフォルダ-△○)

 ファイルをリストで表示するソフトは見つけられましたが、検索式に当てはまるファイル数を表示させて、そのフォルダ名を変更するようなソフトがみつかりませんでした。
 フォルダ名を変えるのが難しいのであれば、せめて上記2のファイル数を表示まで行えるソフトがあれば助かるのですが、どなたかよろしくお願いいたします。

 只今、手作業でこの作業(フォルダ内で出張に関するファイルの数を調べてフォルダの名前の後に数量を表示させる)を行っていますが、ソフトで自動化できないかと思っています。フォルダ数が沢山あるうえに定期的に数の確認をしていますので、作業の軽減を図りたいと思っています。

 よろしくおねがいいたします。

Aベストアンサー

>2回目で…でエラー
すみませんm(_ _)m
ソフトを点検した時は、うまく行っていたのですが、
なぜかアップした時に、文字が変わっていました。
>if folder.Name <> folderNmae then 'フォルダ名に変更が有った時名前を変更する
の行の
folderNmae

folderName
に変更して下さい。
なぜか、aの位置が違っています??

>VBScriptのテキスト
あんまり初心者用のラーニングテキストではないのですが、サンプルプログラムや、サンプルケースが載っている本として
『WSHクイックリファレンス』オライリージャパン/発行所、オーム社発売元(3500円+税)がでています。
あと、
参考URLから以下のドキュメントがダウンロードできます。いわゆるヘルプ形式なので良いです。
結局大元のドキュメントなので、最終的にはここを確認しないといけません。
VBScript ドキュメント
Windows Script Host ドキュメント
Windows スクリプト コンポーネント ドキュメント

参考URL:http://www.microsoft.com/japan/msdn/scripting/default.asp

>2回目で…でエラー
すみませんm(_ _)m
ソフトを点検した時は、うまく行っていたのですが、
なぜかアップした時に、文字が変わっていました。
>if folder.Name <> folderNmae then 'フォルダ名に変更が有った時名前を変更する
の行の
folderNmae

folderName
に変更して下さい。
なぜか、aの位置が違っています??

>VBScriptのテキスト
あんまり初心者用のラーニングテキストではないのですが、サンプルプログラムや、サンプルケースが載っている本として
『WSHクイックリファレンス』オラ...続きを読む

Qfp = fopen(argv[1], "r");を”w" "a" "r+"・・・で試したらどうなる

http://oshiete.goo.ne.jp/qa/8897349.html
 以上のプログラムで
 以下をfp = fopen(argv[1], "r");の
 ”r"以外で以下を入れた場合の結果がどうなるかお聞きしたいです。
"r" 読み込みモード。ファイルが存在しているとする。
"w" 書き出しモード。すでにファイルがあれば内容を削除し、なければ新たに作成する。
"a" 追加モード。すでにファイルがあればその最後に追加し、なければ新たに作成する。
"r+" 更新モード。ファイルが存在しているとする。
"w+" 更新モード。すでにファイルがあれば内容を削除し、なければ新たに作成する。
"a+" 追加更新モード。すでにファイルがあればその最後に追加し、なければ新たに作成する。
 以上ですが、試す環境がございませんので、よろしくお願いいたします。

Aベストアンサー

お書きのとおりで合ってますよ。大丈夫です。

Qファイル名一括変換ソフト

100個以上のWindows(XP,2000)のファイルのファイル名を、任意の名称から、異なる任意の名称に名称変更したいのですが、1つづつ修正するのは間違いが生じるので、予めファイルを作成しておき一括返還したいと考えています。

 変換ファイルは、CSVやテキストファイルで、たとえば、(変換前ファイル名、変換後ファイル名)という形式で指定できるとベストです。他の指定方法でも構いませんが、返還前に再確認できることが望ましいと考えます。
 フォルダは、すべてのファイルが同じところにある前提(どこかで指定する)とします。

 以上のような、フリーソフト、フリーウェア(小額なら、シェアウェアも可)を紹介いただけないでしょうか。

Aベストアンサー

初めまして

これはどうでしょう?
Excel のマクロを使用してファイルの一覧表シートを作成し、指定されたファイルのリネーム又はコピーをする
http://www.vector.co.jp/soft/win95/util/se383332.html

他にもいっぱいありどれが合うか?
http://www.vector.co.jp/vpack/filearea/win95/util/file/name/

Qfopenでファイル名に、変数を使いたい

カレントディレクトリにある「1.txt」を扱う場合は
fp = fopen("./1.txt", "r");
上記で出来るのですが、扱いたいファイルが複数あり、
「./x.txt」 として、「x」の値を変えながら複数のファイルを取り扱いと考えております。

char namae[2]={'1','2'};
for(x=0;x<2;x++)
fp = fopen("./%c.txt",name[x], "r");

とやってみたのですが、
「fopenの呼び出しに余分なパラメータがある」と出てしまいます。
どのようにしたら、よろしいでしょうか?

Aベストアンサー

>fp = fopen("./%c.txt",name[x], "r");
この記述では、
"./%c.txt"
name[x]
"r"
の3つのパラメータとなってしまいます。
fopen()のパラメータは、ファイルパスとモードの2つですので、パラメータが多くなっています。

なので、先に動的に変わるファイルパスを作成し、そのファイルパスをfopen()に指定したらいいのではないでしょうか。

char namae[2]={'1','2'};
char filepath[256];
for(x=0;x<2;x++) {
 sprintf(filepath, "./%c.txt", namae[x]);
 fp = fopen(filepath, "r");
 /*その他の処理*/
 fclose(fp);
}

Qフォルダー名がファイル名になるフリーソフト

たくさんの画像フォルダとその中にそれぞれ大量の画像ファイル(jpeg)があります。

一括してファイル名変換するソフトの中で、

フォルダ名をファイル名+ナンバーに一括変換するフリーソフトは、ないものでしょうか。
少し、特殊なファイル名変換です。

Windows7で動くとありがたいです。
よろしくお願いします。

Aベストアンサー

リネームソフトを一つ用意しておくと便利ですよ。
例えば【 Flexible Renamer 】などの定番ソフトをインストール
します。このようなソフトなら画像ファイル以外のファイルも
簡単に一括変換できます。
http://hp.vector.co.jp/authors/VA014830/FlexRena/

複数の画像フォルダが一つのフォルダの中にある場合ならば、
[下位フォルダ以下も対象]へとチェックを付け、[ターゲット]
を[ファイル]にして[フィルタ]を[ *.jpg ]にします。
[メニュー]から[連番や文字列の追加]を開きます。
[フォルダ名 + 連番]を指定して開始番号や桁数を指定。
[リネーム]が指定してあれば、右の一覧にある[新しい名前]が
フォルダ名と連番の組み合わせに変わっているでしょうから、
[リネーム]ボタンを押して一括変換します。

このようなソフトを一つ持っておけば、様々な応用ができて、
活用範囲が広がりますから、定番ソフトとしてお勧めします。

Qfp = fopen(argy[1], "r");の[1]の意味は

https://oshiete.goo.ne.jp/qa/8940272.html
 の11行目に
fp = fopen(argv[1], "r");の[1]の意味が分かりません。
試したいのですが、ソフトがうまく動きません
 よろしくお願いいたします。

Aベストアンサー

前の例題も読みました。

大分苦戦しているようですが、配列については理解が進みましたでしょうか?
お答えしますと、最初のパラメータ文字列が代入されています。

古いC言語の約束でして大変有名なものです。

コマンドラインコンソールから実行ファイル名を書いて、
パラメータをスペースで区切って指定したとします。

このパラメータ文字列が[1]以降に入ります。
例として、"test"と言う名前の実行ファイルがあったとします。

例)> test test1 test2 3 4

このようにコマンドラインから入力し実行すると、

argc = 5
argv[0] = "test"
argv[1] = "test1"
argv[2] = "test2"
argv[3] = "3"
argv[4] = "4"

と文字列が入ってきます。

以下はサンプル。

void main( int argc , char *argv[])
{
if( argc < 2 )
{
// パラメータ指定がなかった場合の表示
printf( "test に続けて4つまでパラメータを入力できます\n");
exit(0);
}
if( argc > 5 )
{
 // パラメータが5つ以上あった場合の表示
printf( "5つ以上のパラメータは受け付けません\n");
exit(-1);
}

// 正常ルート
printf( "パラメータの数は%d個ですね?ニヤッ\n", argc-1);
printf( "最初のパラメータは%sでしょ?\n", argv[1]);
printf( "残りはargv[2]以降ですが、面倒なので表示しません\n");
}

と言う具合に、引数を活用できます。argv[0]には、実行ファイル名が入ります。
argc は実行ファイルの名前も含めてカウントされます。

プログラムによっては必要な引数の数が変わりますし、
ユーザーのコマンドラインからの入力ミスなどでパラメータがなかったり、
必要なパラメータが不足していたりしますので、
argcとargvを使って最初にシンタックスエラーチェックをするのが常道です。

実行ファイル名の指定がなく、プログラムが実行されることはないと思われます
から、argcは1以上の値になります。

argc, argvの活用は、
実行コマンドを手打ちで打ち込むコンソール形式でよく用いられる基本的な
アプリケーションの開発手法です。

ご質問の箇所は、
第一パラメータにプログラム内で読み込むファイルのファイル名を指定してるの
でしょう。(よくあります)

しかし、Windowsなどのウィンドウを使用するアプリケーションは、
これとは違っておりますので注意が必要です。
(C言語とは別に、Windowsに特化した開発ノウハウの勉強が必要です)

Windows系で上記の様な基本的なプログラムを作成する場合は、
プロジェクトの作成時に(VisualStudioなどで)コンソールアプリケーション
を選んで作成します。実行時にコンソールが開きます。

Linuxの場合は、コンソールがデフォルトになっているでしょうから、
(特殊な設定がなければ)そのまま作成できます。

テキストエディタでソースを記述し、gcc などでコンパイルします。
実行形式ファイルが出来ていれば、想定どおりの動作をするでしょう。

ファイルの読み込みが出来るようになったら、
ファイルの内容を書き換えて保存したり、
ファイル名を変えたり、
ディレクトリ内のファイルを全て表示したり、
ファイル内に含まれる文字列を検索し、該当するファイルをリストしたりなど、

有用なサンプルプログラムを沢山作って練習します。

ファイルを読み込む先は、char型の配列でバイトサイズのメモリーとして確保
します。メモリーと変数の関係を充分に理解することをお勧めします。
殆どのプログラムは、このメモリーの確保やメモリーサイズの計算と格闘する
場合が多くなるからです。

バイナリー形式のファイル(すべてはバイナリー形式として良いのですが)に
ついて理解が深まった後は、
bmpの画像ファイル、wavなどの音声ファイルをあけて、
これの中身を書き換えて遊びます。

特にwavファイルは、音量の変更や周波数フィルタなども掛けれますので、
メモリ、配列、ファイルの関係を(焦らずに)ゆっくり理解するだけで、
今の知識レベルでも面白いことが沢山出来ます。

以上、ご参考に成れば。

前の例題も読みました。

大分苦戦しているようですが、配列については理解が進みましたでしょうか?
お答えしますと、最初のパラメータ文字列が代入されています。

古いC言語の約束でして大変有名なものです。

コマンドラインコンソールから実行ファイル名を書いて、
パラメータをスペースで区切って指定したとします。

このパラメータ文字列が[1]以降に入ります。
例として、"test"と言う名前の実行ファイルがあったとします。

例)> test test1 test2 3 4

このようにコマンドラインから...続きを読む

Q複数のファイルのファイル名を一括に変換するフリーソフトは?

複数のファイルのファイル名を一括に変換するフリーソフトは?

複数のファイルのファイル名を一括に変換して

運動会01
運動会02
...

という風に順番号名を付けることができる
いいフリーソフトを教えてください。

Aベストアンサー

http://www.vector.co.jp/soft/win95/util/se230280.html

QC/C++言語で変数名から変数のアドレスを取得する方法があれば、ご教示願います。 例えばですが、関数

C/C++言語で変数名から変数のアドレスを取得する方法があれば、ご教示願います。

例えばですが、関数GetProcAddress()は、関数の文字列からエクスポート済みの関数のアドレスを戻り値で返しています。
GetProcAddress()と同じようにアドレスを取得したい変数名の文字列を渡して、変数のアドレスを取得したいです。

よろしくお願いします。

Aベストアンサー

無理です。

C/C++ はコンパイルした時点で変数名は捨てられて自動採番の識別子に置き換えられるので。

ただし、「どうしても変数名から」というときのために「マクロ引数の文字列化」を巧みに利用してそれらしい挙動をさせるためのコードはよく見ます。
詳しくはググってください。

参考になればよろしいんですが。

Qフォルダ内のファイル名変換ソフト

沢山あるファイルのファイル名を変更して、ファイルの整理をしたいと
思っております。

フォルダを指定して、中にある沢山のファイルに、同じ条件を指定して、
ファイル名に変換をかけるソフトは持っております(001~099といった連番
をつける等)。

それぞれのファイルに個別の名前をつけたい場合、ひとつひとつのファイル名を
「右クリック→名前の変更→名前入力」で変更しているのですが、もっと簡単に変
換したいです。

イメージとしてはフォルダを指定して、フォルダ内のファイル名が一覧に並んで
表示され(エクセルの表のように)、それを変更すればフォルダ内のファイル名も
変換できてしまうような事がしたいです。

探したのですがそういったソフトが見つかりませんでした。
原理的に不可能なのでしょうか?

そういった事を実現できるソフトをご存知の方、教えてください。
宜しくお願い致します。

Aベストアンサー

次のようなフリーソフトでは,どうでしょうか。

テキストエディタのように変更したいなら
http://www.vector.co.jp/soft/win95/util/se317503.html

エクセル上でやりたいなら
http://www.vector.co.jp/soft/win95/util/se208296.html

QC言語のfopen関数とfseek関数についてお尋ねします。

fopen関数について
オープンモードは様々ありますが、既存のファイルをバイナリモードで書き換えるということは出来ないのでしょうか?
オープンモードが、「wb」などの場合は既存のデータを上書きしてしまって、内容が消えてしまいます。
かと言って、「ab」で開くと最後から追加されてしまいます。
fseek関数を使って、場所を指定しても言うことを聞いてくれませんでした。
既存のファイルの途中部分を少し書き換えるだけの作業は、出来ないのでしょうか?

fseek関数について
バイナリモードで開いているときに、ファイルの全体を知りたい時に次のように書いたら間違いなのでしょうか?
fseek(FILE *stream, 0, SEEK_END);
ftell(FILE *stream);
fseekで最後のポジションに移動させて、ftellで最後のカレントポジションを調べるという方法は使えるのでしょうか?

以上2点よろしくお願いします。

Aベストアンサー

ftell って long int を返すから, 「long int の範囲を超えてしまうような大きさのファイル」だと絶対に不可能です.


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報