• ベストアンサー

ファイル結合

現在、テキストファイルの結合で困っています。 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

  • COPYコマンドで結合すると余計な改行コードができる

    batファイル内でCOPYコマンドで2つのファイルを結合するコードを書いています。 しかし、中身が空の0KBのデータ同士を結合すると、改行データが1つ含まれる1KBのデータが作成されてしまいます。 この改行データの作成を防ぐにはどのようなコマンドを書けばよろしいでしょうか。どなたかご存知の方がいれば宜しくお願い致します。 【2つのファイルを用意】 test01.txt 0KB test02.txt 0KB ↓ 【結合】 COPY test*.txt test.txt ↓ 【改行コードを含むテキストが作成される】 text.txt 1KB

  • バッチファイルで複数フォルダのファイルを結合したい

    バッチファイルで複数フォルダの中にあるlist.txtというテキストファイルを結合するにはどのように記述すればよいでしょうか。 具体的には、 複数のフォルダがあり、 C:\test\202104026\list.txt C:\test\202104025\list.txt      : C:\test\20000101\list.txt というような感じで、 各フォルダの中にlist.txtというファイルが入っています。 list.txt以外にもいろいろなファイルが入っています。 各フォルダの中のlist.txtファイルの内容を結合した1個のファイルを生成するバッチファイル(test.bat)を教えてください。 よろしくお願いします。(Windows10)

  • ファイルの作成方法…

    VBでテキストファイルの中身を開くプログラムを作成しました。 そのテキストファイルの中身を変更(編集)し、それを同じファイルに上書き保存するのではなく、開いたファイルのある同じフォルダ内に新しいファイルを作り保存したいと思っています。  <例>test1.txtというファイルを開き中身を編集してそれを同じフォルダ内に新しくtest2.txtというファイルを作って保存するといった感じです。 そこで新しいファイル名で保存する(新しいファイルを作成する)方法を教えて欲しいんです、こんな説明で分かってもらえるか不安ですが…、どなたか分かる方教えていただけませんでしょうか? かなりの初心者なのですが、私でも理解できるようなプログラムだと嬉しいです。 よろしくお願いします。

  • 複数テキストを一行ずつファイル名を付けて結合する方法

    複数テキストを一行ずつファイル名を付けて結合する方法 フォルダにある複数のテキストデータを1つのテキストデータに結合する際、テキスト1行毎の先頭にファイル名を付けたいのですが。具体的には以下の通りです。 最終的にはexcelに取込み処理するので、excelのマクロかDOS系でできるとあり難いです。 [file1.txt] 1111111111 2222 33333333 [file2.txt] 123 1234 ↓ [all.txt] file1.txt 1111111111 file1.txt 2222 file1.txt 33333333 file2.txt 123 file2.txt 1234

  • ファイル操作について、テキストファイルの書き換え

    よろしくお願いします。 データファイルAからデータを取得して、テキストファイルBの内容の一部を取得したデータで書き換えるという操作を行うプログラムを作りたいです。 具体的には、 データファイルA[A.txt]の中身 111 222 333 444 テキストファイルB[B.txt] 文字列1="123" 文字列2="234" 文字列3="345" 文字列4="456" というような二つのファイルを読み込み、B.txtの""で囲まれた部分を、A.txtで取得したデータで置き換えるような操作を行いたいのですが・・。 使用する言語としてはスクリプト言語であるperl、もしくはプログラム作成経験があるCを使用しようと思っています。(perlは未経験で入門書を読んでいるレベル)

    • ベストアンサー
    • Perl
  • テキストファイルをエクセルに読み込むには 

    こんにちは いつもありがとうございます。 今回の質問は テキストファイルの中身を1行ずつ エクセルのA列に読み込む には  です。 okazu.txt ファイルの中身 ーーーーーーーーーーーーーーー 今日の夕飯の材料 \\\\\ 湯豆腐(豆腐抜き)\\ =========== お湯 ¥0 昆布 ¥10 ーーーーーーーーーーーーー 希望する状態 エクセルのA列 2行目から9行目に下記のように記入してほしい ーーーーーーーーーーーーーーー 今日の夕飯の材料 \\\\\ 湯豆腐(豆腐抜き)\\ =========== お湯    ¥0 昆布    ¥10 ーーーーーーーーーーーーー VBAだとどうなりますか? ネット上の参考例をつかってみましたが エラーがでたり、途中までしかよめなかったりとうまくいきません。 テキストファイルにはタブで空白を調整している部分もあります。

  • テキストファイルの任意の文字以降の文字列を削除したい

    test.txt AAA+あいうえお BBB+かきくけこ CCC+さしすせそ DDD+たちつてと EEE+なにぬねの 上記(test.txt)のようなテキストファイルから、各行の+以降の文字列を削除して、 以下(result.txt)のようなテキストファイルを生成させるプログラムを作成させたいです。 result.txt AAA BBB CCC DDD EEE このようなプログラムを作るにはどのようにすればよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • batファイルのcopy機能でファイルを結合

    batファイルのcopy機能でファイルを結合すると、最終行に必ず ■ がついてくるのですが、これを消す方法ご存知ありませんか? A.txtの内容 yahoo B.txtの内容 google test この2つのファイルを結合させてA.txtを見てみると A.txt yahoo google test ■ ↑最終行の■を消したい [コマンド] COPY A.txt + B.txt でファイルを結合 A.txtの最終行に ■ マークが現れる。

  • テキストファイルの結合

    以下のようなテキストファイル結合を実現したいと思っています。 【ファイル1】 あいうえお かきくけこ さしすせそ 【ファイル2】 123 456 789 ↓↓↓↓↓↓↓↓↓↓↓ 【結合後】 あいうえお123 かきくけこ456 さしすせそ789 このように行単位でファイル1とファイル2の文字列を結合していきたい のですが、VBAでこれを実現できますか? VBAでなく、他の言語でも良いのですが、VBAが手っ取り早い感じがしたので…。 ご教授いただけますよう宜しくお願いします。

  • csvファイルの特定のセルから読み込み

    C++についての質問です。 あるファイル(テキストでもエクセルでもCSVでも可)に書かれている特定のセル数値(整数)を読み込んで、プログラム内で入力する方法が知りたいです。 例えば、"test.txt"というファイルに 1 2 3 4 5 3 2 3 1 2 というような数字の羅列があった場合に,2行目4列目のセルの値を読み込む プログラムは、どうのうにすればできるでしょうか?

専門家に質問してみよう