• 締切済み

ファイルの入出力に関して

ファイル入出力の部分なんですが 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"); 以下省略. 何か良い方法があれば教えてもらえないでしょうか.

みんなの回答

noname#48699
noname#48699
回答No.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)
回答No.3

何に手間が掛かるのか、まだ少し不明ですが。。。 #的はずれなら無視してください。 >フォルダ名を入力してそのテキストファイルのみを指定しその全てを読み込んだ後 1.フォルダ名を入力させる 2.各フォルダの下にはreadfile.txtなど(適当なファイル)をつくり読み込むファイルのファイル名を記述しておく 3.プログラムはそれを読み込んで必要なファイルを読み込む。 というのはどうでしょうか? ファイル読み込みは使えるわけですし、 sprintfと組み合わせれば出来そうです。

  • dease
  • ベストアンサー率0% (0/7)
回答No.2

char fin[80]; char folder[10]; int sub; scanf("%s%d", &folder, &sub); sprintf(fin, "%s\\%d.txt", folder, sub); input = fopen(fin,"r"); こんな感じ?

tekkou0812
質問者

お礼

sprintfを使えることをすっかり忘れていました. 大変参考になりました.どうもありがとうございました.

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

>入力に手間がかかります と書かれていますが、 >コマンドライン上で入力させてひとまとめでデータを読み込みたいと ご自分で上記のように書いているのですから、 それが仕様なのでは無いのですか?? 手間が掛かるというのはどういう意味でしょうか? 例えば、今回の例なら、フォルダ名の 070912 と入力させて そのフォルダ名の下のファイルを全部読み込むみたいに、 簡略化したいということでしょうか?

tekkou0812
質問者

補足

実際にところ,フォルダ名を入力してその下のテキストファイルのみを指定し,その全てを読み込んだ後にそれぞれに対する物性値を求め,最終的にはひとつのデータとして纏めるようにすることが目的です.

関連するQ&A

  • ファイル入出力で

    現在ファイル入出力の項目をしているのですが、以下の内容で実行すると エラーが出てどうしても実行できません。主にどこを直せばいいのでしょうか? /* ファイルをコピーするプログラム */ #include <stdio.h> int main(void) { FILE *fin, *fout; char infile[40], outfile[40]; char str[256]; printf("コピー元ファイル = "); scanf("%39s", infile); printf("コピー先ファイル = "); scanf("%39s", outfile); if( (fin = fopen(infile, "r") ) == NULL) { printf("Input file open error.\n"); return 1; } if( (fout = fopen(outfile, "w") ) == NULL) { printf("Output file open error.\n"); fclose(fin); return 1; } while(fgets(str, sizeof(str), fin) != NULL) { fputs(str, fout); } fclose(fin); fclose(fout); return 0; } エラーは FILE 、fin, fout,NULLの未定義です。 よろしくお願いします。

  • ファイルが開かない

    こんにちは、最近C言語の入門書を読み とあるプログラムをつくったのですが、思ったようになりません。 そのプログラムは typ1 という名前でこのようになっています。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fin; char buf[256]; char filename[80]; printf("入力ファイル名を指定してください="); gets(filename); fin = fopen("filename", "r"); if(fin == NULL) { printf("%sをオープンできません\n", filename); exit(1); } while(fgets(buf, 256, fin) != NULL){ printf("%s", buf); } fclose(fin); return 0; } となっており、プログラムを起動して指定したファイルを読み込んで、その内容を画面に出力するというものです。読み込み用ファイル(名前はsmp1)はメモ帳でつくっており、内容はアルファベットを一行目に、1から9の数字を二行目に書いて、アプリケーションのtyp1.exeがあるDebugというディレクトリと同じ場所に保存しております。 このプログラムはVisual Studio net 2003で作っおり エラー等はなく正常に動くのですが読み込むファイル(この場合smp1)を指定しても 入力ファイル名を指定してください=smp1.txt smp1.txtをオープンできません。 Press any key to continue となってしまいます。  読み込み用ファイルの場所が適切ではないのでしょうか? どなたか教えてください。

  • ファイルの入出力を行っての文字列反転

    入力した文字列を反転させて出力したいのですが どうしたらよいでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> /* 定数 */ #define DELIMITER "/ ," /* 区切り文字 */ int main(void) { FILE *fin,*fout; char infile[40],outfile[40],s[256],s2[256]; char *token; char *strch[50]; int count = 0; int i; printf("入力ファイル名="); gets(infile); printf("出力ファイル名="); gets(outfile); if( (fin=fopen(infile,"r"))==NULL) { /* 入力ファイルオープン */ printf("入力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } if( (fout=fopen(outfile,"w"))==NULL) { /* 出力ファイルオープン */ printf("出力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } while(fgets(s,256,fin)!=NULL) { /* 入力ファイルから読み込んだデータを */ token = strtok(s, DELIMITER); while (token != NULL) { strch[count] = token; token = strtok(NULL, DELIMITER); count++; } for(i = count; i > 0; i--) { strcat(s2, strch[i]); } fputs(s2,fout); /* 出力ファイルに書き込み */ } fclose(fin); /* 入力ファイルクローズ */ fclose(fout); /* 出力ファイルクローズ */ return 0; }

  • ファイルの入出力を行って文字を変換する

    入力するファイルにa~zを記入しておき、 出力するファイルにaなら1、bなら2、zなら26に変換させたいのですがどうしたらよいでしょうか? #include <stdio.h> #include <string.h> #define DELIMITER "/ ," /* 区切り文字 */ int main(void) { FILE *fin,*fout; int count=0; int i; char s[256], s2[256]; char alpha[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; int kazu[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26}; char *taken; char *strch[50]; if( (fin=fopen("file1.txt","r"))==NULL) { printf("入力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } if( (fout=fopen("file2.txt","w"))==NULL) { printf("出力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } while(fgets(s,256,fin)!=NULL) { while (token != NULL) { strch[count]=token; token = strtok(NULL, DELIMITER); count++; } memset(s2, NULL, sizeof(s2)); fprintf(fout,"%d\n",s2); } fclose(fin); fclose(fout); return 0; }

  • 大量の入力ファイルを扱うとき、for文などで簡略化できる?

    例えば、"input_1.dat", "input_2.dat" ... "input_9.dat","input_a.dat" ... "input_z.dat"のように、 ファイル名が一定のフォーマットに従った 入力ファイル群があるとします。 (ファイル内の数値の配置フォーマットも一緒) これらのファイルの中身を fopen→fscanf→fcloseを使って読みこむとき、 FILE *fin1, *fin2; fin1 = fopen("input_1.dat","r"); fin2 = fopen("input_2.dat","r"); ... のようにファイル名をひとつひとつ読みこまず、 for, whileなどを用いて簡単に書けないでしょうか?

  • このプログラムの解説を

    C言語の勉強を始めたのですが、質問があります。 下のプログラムをコンパイルしたら   入力ファイル名= と出ますが、これは何を入力すればよいのでしょうか? 何か入力しても「~がオープンできません」と表示されて、これは、自分が持っているファイルを打てばよいのですか?(このプログラム自体も何を意味しているか、まだ理解できていません。) 解説よろしくお願いします。 #include<stdio.h> #include<stdlib.h> main() { FILE *fin; char buf[256]; char filename1[20]; printf("入力ファイル名="); gets(filename1); fin=fopen(filename1,"r"); if(fin==NULL){ printf("%sがオープンできません.\n",filename1); exit(1); } while(fgets(buf,256,fin) !=NULL){ printf("%s",buf); } fclose(fin); }

  • ファイルの入出力

    Perl初心者です。基礎の基礎なので自分なりに調べたり勉強したりしたのですがいまひとつ理解できないので教えて下さい>< ファイルの入力のサンプルとして open(FIN,"name.txt"); binmode FIN,'utf8'; $line=<FIN>; chomp($line); print"hello!$line\n"; close(FIN); を何の説明もなく提示されました。 2行目は日本語を入力するためのものだということはわかります。 しかし所々に出てくるFINとは何でしょう?また$lineとは何事でしょう? 質問もしてみたのですが如何せん言ってることがよくわからない教授なもので、万事休すです´` どなたかこのファイルを簡単に説明して下さるとありがたいです。

    • ベストアンサー
    • Perl
  • 文字列の比較について

    99としか書いてないファイルxxx.txtが有り、以下のようにして読み込みました。 char aaa[256]; if((fin=fopen("c:\\xxx.txt","r"))==NULL){ AfxMessageBox("読み込みファイルオープン出来ません"); return TRUE; } while((fgets(aaa,256,fin))!=NULL){ } fclose(fin); そしてstrcmpで比較したところ、1が返り等しくないと判定されます。 strcmp(aaa,"99") どうすれば等しいと判定できるようになりますか?

  • C言語初心者です。ファイルの入出力とwhile文の練習で下のようなプロ

    C言語初心者です。ファイルの入出力とwhile文の練習で下のようなプログラムを書いていたのですが、 どうもwhile文のところで無限ループに陥っているようです。 feofで入力ファイルの終端をチェックしていると思うのですが、なぜwhile文が終わらないのか分かりません。初歩的な質問ですが、よろしくお願いします。 ちなみに入力ファイルはバイナリ形式の2次元データです。 =============================================== #include <stdio.h> int main(int argc, char **argv){ char *input; FILE *data; int num; input = argv[1]; data = fopen(input,"r"); if (data == NULL){ puts("file open error!!"); return 1; } while(!feof(data)){ num ++; printf("%d\n",num); } fclose(data); return 0; } ===========================================

  • ファイルの入出力に関する質問

    ファイルに書かれたテキストから一部分だけを抜き出し、 それを再び別のファイルに書き込むプログラムを作成したいのですが、 書き込んだファイルの中身が何もないという事態に陥りました。 プログラムは以下の通りです。 #include <stdio.h> #include <stdlib.h> #define STR_MAX 256 /* 文字列入力用配列長 */ int main(void) { FILE *fp, *fo; /* ファイルポインタ用 */ char buff[STR_MAX]; /* 文字列用 */ char ch1;/* 文字入力前 */ char ch2; /* 文字入力後 */ if((fp = fopen("in.txt", "r")) == NULL){ /* 入力ファイルオープン */ printf("入力ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } if((fo = fopen("out.txt", "w")) == NULL){ /* 出力ファイルオープン */ printf("出力ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } while(1){ /* 永久ループ */ ch1=ch2; ch2 = fgetc(fp); /* ファイルfpから1文字読み込み */ if(ch2 == EOF){ /* 読み込み終了 */ break; /* ループ脱出 */ } if(ch1=="目"&&ch2=="的"){ /*目的の項目だけ書き込む*/ while(ch1!="方"||ch2!="法"){/*方法がきたら書き込み停止*/ ch1=ch2; ch2 = fgetc(fp); fprintf(fo, "%c",ch2); }} } fclose(fp); /* 入力ファイルクローズ */ fclose(fo); /* 出力ファイルクローズ */ return(0); } ちなみに抜き出す前のファイルは 「背景:近年、日本経済において・・・<中略>・・・目的:本研究では・・・・・・方法:本研究では・・・・・背景:最近、アメリカ市場における・・・目的:今年度における・・・方法:・・・」 のように改行されずに入力されており、 そこから、目的の事項だけを取り出し 「目的:本研究では・・・<中略>・・・。目的:今年度における・・・」 のようなファイルを作りたいと思っています。 どうかご教授ください。

専門家に質問してみよう