• ベストアンサー

UNIX C ファイル出力

UNIX Cにてあるテキストファイルの中身(1行分)を、別のテキストファイルに出力したいのですが、どうすれば、いいでしょうか。 例。A.txt 123 yano 200612   ↓ B.txt 123 yano 200612

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.8

★サンプルを紹介しましょう。 /* 区分が '0' のレコードだけを、B.txt に書き出す処理 */ static void ZeroRecordOutput( FILE *fp, FILE *fo ) {  char buff[ BUFSIZ ];    while ( fgets(buff,BUFSIZ,fin) != NULL ){   if ( buff[0] == '0' ){ ←区分が '0' だから!    fputs( fo, buff );   }  } } 引数: ・fp は入力ストリーム(A.txt)のファイル・ポインタです。 ・fo は出力ストリーム(B.txt)のファイル・ポインタです。 ・どう。簡単でしょう。 ・行単位で入出力すると簡単に処理できますよ。 補足: ・回答者 No.1 ~ No.7 さんの回答&アドバイスをよく読みましょうね。 ・最後に人に頼りすぎないように!頑張りましょう。では、さようなら。

yano-kouichi
質問者

補足

なんとかなりそうです。 ありがとうございます。 アウトプットのファイルですが、ない場合はエラーになるんでしょうか? ない場合、新規にて作成するにはどうするのでしょうか?

その他の回答 (7)

noname#22058
noname#22058
回答No.7

>区分が、'0'のレコードを、B.txtに書き出す。 具体的な仕様を最初に書いてくだされば、 変な回答をせずにすみましたのに…。

yano-kouichi
質問者

お礼

申し訳ありませんでした

  • baber
  • ベストアンサー率18% (17/92)
回答No.6

No.1 です。 すでに解答もでているようなので具体的なプログラムは書きません。 というか、使用する関数を提示してあるのだからあとは、manデータなりをみれば使用方法がわかりますよね。 具体的って言っても、要点だけなのか、全部なのか、場合によってはincludeって何?とかmain()って何?とかも具体的に説明しないといけませんか。 そんなの人に頼りすぎです。もう少し、質問を絞ってください。

  • herbest
  • ベストアンサー率42% (15/35)
回答No.5

ユニークなのか'0'または'1'なのかどっちでしょうか? 多分話の流れから'0'または'1'だと思いますが、 だとすれば一行目が区分が'0'の場合だけ出力するのか 最初に出てくる'0'の行だけを出力するのか、'0'のもの全て出力するのか。 はたまた2行だけのファイルなのか。 とゆーかNo.4のプログラムじゃダメなんでしょうか。 No.4のプログラムでは上手く行かない部分を教えてください。

yano-kouichi
質問者

補足

ユニークではなく、区分が'0'のレコードを抽出して、B.txtにかきこみます。

  • herbest
  • ベストアンサー率42% (15/35)
回答No.4

どーゆーフォーマットなのか教えて下さい。 空白区切りで区分はユニークな数字って事でいいんでしょうか。 とりあえず何とかなりそうなソース置いときます。 int main(){system("grep ^0 A.txt > B.txt");return 0;}

yano-kouichi
質問者

補足

はい、そのとおりです。 ユニークであり、区分は、'0'または'1'になります。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.3

No.2の回答は1行ではなくファイル全部をコピーしてしまいますね。 #include <stdio.h> #include <stdlib.h> #include <errno.h> int main(void) { FILE *fin, *fout; char buf[BUFSIZ]; if ((fin = fopen("A.txt", "r")) == NULL) { fprintf(stderr, "Can't open A.txt\n"); exit(errno); } if (fgets(buf, BUFSIZ, fin) == 0) { fprintf(stderr, "No content\n"); exit(1); } if ((fout = fopen("B.txt", "w")) == NULL) { fprintf(stderr, "Can't open B.txt\n"); exit(errno); } fputs(buf, fout); fclose(fin); fclose(fout); return 0; }

yano-kouichi
質問者

補足

すいません。最初の方で、処理もれがありました。 正確には、以下のようになります。 区分が、'0'のレコードを、B.txtに書き出す。 A.txt 区分 番号 名前 日付 0 123 yano 200612 1 122 mari 200612   ↓ B.txt 0 123 yano 200612

noname#22058
noname#22058
回答No.2

#include <stdio.h> #include <stdlib.h> int main(void) { system("cp A.txt B.txt"); return 0; }

yano-kouichi
質問者

補足

すいません。最初の方で、処理もれがありました。 正確には、以下のようになります。 区分が、'0'のレコードを、B.txtに書き出す。 A.txt 区分 番号 名前 日付 0 123 yano 200612 1 122 mari 200612   ↓ B.txt 0 123 yano 200612

  • baber
  • ベストアンサー率18% (17/92)
回答No.1

fgets() と fprintf() を使えば出来るのではないでしょうか。

yano-kouichi
質問者

補足

具体的にどう記述すればよろしいのでしょうか? お願いします。

関連するQ&A