- ベストアンサー
UNIX C ファイル出力
UNIX Cにてあるテキストファイルの中身(1行分)を、別のテキストファイルに出力したいのですが、どうすれば、いいでしょうか。 例。A.txt 123 yano 200612 ↓ B.txt 123 yano 200612
- みんなの回答 (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 さんの回答&アドバイスをよく読みましょうね。 ・最後に人に頼りすぎないように!頑張りましょう。では、さようなら。
その他の回答 (7)
>区分が、'0'のレコードを、B.txtに書き出す。 具体的な仕様を最初に書いてくだされば、 変な回答をせずにすみましたのに…。
お礼
申し訳ありませんでした
- baber
- ベストアンサー率18% (17/92)
No.1 です。 すでに解答もでているようなので具体的なプログラムは書きません。 というか、使用する関数を提示してあるのだからあとは、manデータなりをみれば使用方法がわかりますよね。 具体的って言っても、要点だけなのか、全部なのか、場合によってはincludeって何?とかmain()って何?とかも具体的に説明しないといけませんか。 そんなの人に頼りすぎです。もう少し、質問を絞ってください。
- herbest
- ベストアンサー率42% (15/35)
ユニークなのか'0'または'1'なのかどっちでしょうか? 多分話の流れから'0'または'1'だと思いますが、 だとすれば一行目が区分が'0'の場合だけ出力するのか 最初に出てくる'0'の行だけを出力するのか、'0'のもの全て出力するのか。 はたまた2行だけのファイルなのか。 とゆーかNo.4のプログラムじゃダメなんでしょうか。 No.4のプログラムでは上手く行かない部分を教えてください。
補足
ユニークではなく、区分が'0'のレコードを抽出して、B.txtにかきこみます。
- herbest
- ベストアンサー率42% (15/35)
どーゆーフォーマットなのか教えて下さい。 空白区切りで区分はユニークな数字って事でいいんでしょうか。 とりあえず何とかなりそうなソース置いときます。 int main(){system("grep ^0 A.txt > B.txt");return 0;}
補足
はい、そのとおりです。 ユニークであり、区分は、'0'または'1'になります。
- mac_res
- ベストアンサー率36% (568/1571)
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; }
補足
すいません。最初の方で、処理もれがありました。 正確には、以下のようになります。 区分が、'0'のレコードを、B.txtに書き出す。 A.txt 区分 番号 名前 日付 0 123 yano 200612 1 122 mari 200612 ↓ B.txt 0 123 yano 200612
#include <stdio.h> #include <stdlib.h> int main(void) { system("cp A.txt B.txt"); return 0; }
補足
すいません。最初の方で、処理もれがありました。 正確には、以下のようになります。 区分が、'0'のレコードを、B.txtに書き出す。 A.txt 区分 番号 名前 日付 0 123 yano 200612 1 122 mari 200612 ↓ B.txt 0 123 yano 200612
- baber
- ベストアンサー率18% (17/92)
fgets() と fprintf() を使えば出来るのではないでしょうか。
補足
具体的にどう記述すればよろしいのでしょうか? お願いします。
補足
なんとかなりそうです。 ありがとうございます。 アウトプットのファイルですが、ない場合はエラーになるんでしょうか? ない場合、新規にて作成するにはどうするのでしょうか?