• ベストアンサー

ファイル結合

現在、テキストファイルの結合で困っています。 test1.txt test2.txt・・・・・・test*.txtのファイルがあり それぞれのファイルには縦に1列、数値が500個入っています。 test1.txtの中身(例) 0.3 0.5 0.8 0.6 0.2 0.8 それを以下のように結合したいのですがうまくいきません 0.3 0.8 0.2・・・・・・ 1.9 0.5 0.8 0.7・・・・・・ 0.1 0.8  ・ 0.6  ・ 0.2  ・ 0.8 0.5 0.4・・・・・・ 0.7 参考書のプログラムを参考に作ってみたのですが途中でずれてしまうのです そのプログラムを載せるべきかもしれませんが、大部分が参考書のままなので今のところ載せてません こんな状態では難しいとは思われるのですが、どうかアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

ちょっと勘違いしてましたね。 3つの結合なら、こんな感じですかね。 fgets(dx1,256,fp1); fgets(dx2,256,fp2); fgets(dx3,256,fp3); sprintf(dy,"% 10.6lf % 10.6lf % 10.6lf",atof(dx1),atof(dx2),atof(dx3)); fputs(dy,fp4);

tera5050
質問者

お礼

たびたび申し訳ありません 試してみたいと思います

その他の回答 (5)

回答No.6

ft2 と ft3 が同じファイル名になってたり、 fp3をリードで開いてfputsしてたり、 ちょこちょこ間違いがありますよ。 sprintf(ft1,"test%d.txt",j-1); sprintf(ft2,"test%d.txt",j); sprintf(ft3,"test%d.txt",j); if((fp1=fopen(ft1,"r"))==NULL){ if((fp2=fopen(ft2,"r"))==NULL){ if((fp3=fopen(ft3,"r+"))==NULL){ if((ie1=fgets(dx1,256,fp1))==NULL) {error(1,i,ie1);exit(-1);} if((ie2=fgets(dx2,256,fp2))==NULL) {error(2,i,ie2);exit(-1);} fputs(dy,fp3);

tera5050
質問者

お礼

ご指摘ありがとうございます 自分としては、これで、forで回して指定した数だけファイルを結合できるかと思ったのですが 駄目なんですね、考え直してみます

回答No.4

strlen→strcpy→strcatの変わりに、読み込んだ文字列を一旦数値に変換して、sprintfでdyに書き出してはいかがでしょう。 sprintf(dv,"% 4.6lf% 4.6lf",atof(dx1),atof(dx2));

tera5050
質問者

お礼

やってみます。 アドバイスありがとうございます

tera5050
質問者

補足

やってみたのですが、うまくいきません 例えば、3つのファイルを結合した場合は 最終的に出力されたファイルには3列表示されるようにしたいのですが 何か間違えてるのでしょうが、2列しか表示されないのです

  • rot-N
  • ベストアンサー率27% (118/432)
回答No.3

テキストを読んで数値にして、その後、printf()で、小数点以上の桁数と小数点以下の桁数を指定して出力しては?

tera5050
質問者

お礼

アドバイスありがとうございます

tera5050
質問者

補足

自分の説明が下手なのでプログラムを乗せます 下のプログラムではtest1.txt、test2.txt、test3.txt の3ファイルを結合したのがtest3.txtという名前で保存されるようにしています FILE *fp1,*fp2,*fp3; char ft1[15],ft2[15],ft3[15],dx1[256],dx2[256],dy[256]; int i,len,j; char *ie1,*ie2; for(j=2;j<=3;j++){   sprintf(ft1,"test%d.txt",j-1);   sprintf(ft2,"test%d.txt",j);   sprintf(ft3,"test%d.txt",j);   if((fp1=fopen(ft1,"r"))==NULL){      printf("ファイル1が開けません\n");      exit(-1);   }   if((fp2=fopen(ft2,"r"))==NULL){      printf("ファイル2が開けません\n");      exit(-1);   }   if((fp3=fopen(ft3,"r+"))==NULL){      printf("ファイル3が開けません\n");      exit(-1);   }   for(i=0; i<500; i++){      if((ie1=fgets(dx1,256,fp1))==NULL) {error(1,i,ie1);exit(-1);}      if((ie2=fgets(dx2,256,fp2))==NULL) {error(2,i,ie2);exit(-1);}      len=strlen(dx1);dx1[len-1]='\0';      strcpy(dy,dx1);      strcat(dy,dx2);      fputs(dy,fp3);   }   fclose(fp1);fclose(fp2);fclose(fp3); } printf("終了"); return 0;

回答No.2

>途中でずれてしまうのです 小数点以下がそろってないのですか?

tera5050
質問者

補足

わかりにくい書き方ですみません プログラムを実行すると -0.518600 -0.389000 -0.376500 -0.389000 -0.376500 -0.389000 このように途中まではなっているようなのですが 途中から -0.000100 00100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 -0.000100 このようになってしまうんです わかりにくいと思いますがよろしくお願いします

回答No.1

以下のように……って、結合規則がさっぱりわかりません。

tera5050
質問者

お礼

説明べたですみません。 ご指摘ありがとうございます

tera5050
質問者

補足

すみません 全てのファイルに縦一列に数値が入ってるので 例えば test1.txtに 4 4 4 4 4 test2.txtに 5 5 5 5 5 となっていたら outfile.txtに 4 5 4 5 4 5 4 5 4 5 と出力されるようにしたいのです

関連するQ&A