- 締切済み
ファイルの入出力に関して
ファイル入出力の部分なんですが FILE *input,*input2,*input3; input=fopen("070921\10.txt","r"); input2=fopen("070921\20.txt","r"); input3=fopen("070921\30.txt","r"); 以下省略. 上記のようなプログラムに関して,フォルダの070921とテキストファイルの10,20,30の部分をコマンドライン上で入力させてひとまとめでデータを読み込みたいと考えています. gets関数を用いて,プログラムの一部を以下のように作成してみたのですが入力に手間がかかります. char fin[80]; gets(fin); input=fopen(fin,"r"); 以下省略. 何か良い方法があれば教えてもらえないでしょうか.
- みんなの回答 (4)
- 専門家の回答
みんなの回答
>コマンドライン上で とのことですので、下が参考になればよいのですが・・。 // test.c #include <stdio.h> #define BCC32 2 void main( int argc, char *argv[] ) { int iSubDirCnt, i; char cDir[256]; iSubDirCnt = argc - BCC32; // 処理系により argc が"test.EXE"を含めるか否かで異なるので注意 for( i = 0; i < iSubDirCnt; i++ ){ sprintf( cDir, "%s\\%s.txt", argv[BCC32-1], argv[i+BCC32] ); printf( "%s\n", cDir ); } } これで動作確認できましたら、下から3行目のprintf文をファイルオープン、リード、ファイルクローズに変えるだけ・・。 (>test.EXE 070921 10 20 30)
- aris-wiz
- ベストアンサー率38% (96/252)
何に手間が掛かるのか、まだ少し不明ですが。。。 #的はずれなら無視してください。 >フォルダ名を入力してそのテキストファイルのみを指定しその全てを読み込んだ後 1.フォルダ名を入力させる 2.各フォルダの下にはreadfile.txtなど(適当なファイル)をつくり読み込むファイルのファイル名を記述しておく 3.プログラムはそれを読み込んで必要なファイルを読み込む。 というのはどうでしょうか? ファイル読み込みは使えるわけですし、 sprintfと組み合わせれば出来そうです。
- dease
- ベストアンサー率0% (0/7)
char fin[80]; char folder[10]; int sub; scanf("%s%d", &folder, &sub); sprintf(fin, "%s\\%d.txt", folder, sub); input = fopen(fin,"r"); こんな感じ?
- aris-wiz
- ベストアンサー率38% (96/252)
>入力に手間がかかります と書かれていますが、 >コマンドライン上で入力させてひとまとめでデータを読み込みたいと ご自分で上記のように書いているのですから、 それが仕様なのでは無いのですか?? 手間が掛かるというのはどういう意味でしょうか? 例えば、今回の例なら、フォルダ名の 070912 と入力させて そのフォルダ名の下のファイルを全部読み込むみたいに、 簡略化したいということでしょうか?
補足
実際にところ,フォルダ名を入力してその下のテキストファイルのみを指定し,その全てを読み込んだ後にそれぞれに対する物性値を求め,最終的にはひとつのデータとして纏めるようにすることが目的です.
お礼
sprintfを使えることをすっかり忘れていました. 大変参考になりました.どうもありがとうございました.