プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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 さんの回答&アドバイスをよく読みましょうね。
・最後に人に頼りすぎないように!頑張りましょう。では、さようなら。

この回答への補足

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

補足日時:2006/12/21 16:15
    • good
    • 0

>区分が、'0'のレコードを、B.txtに書き出す。



具体的な仕様を最初に書いてくだされば、
変な回答をせずにすみましたのに…。
    • good
    • 0
この回答へのお礼

申し訳ありませんでした

お礼日時:2006/12/25 18:39

No.1 です。


すでに解答もでているようなので具体的なプログラムは書きません。

というか、使用する関数を提示してあるのだからあとは、manデータなりをみれば使用方法がわかりますよね。
具体的って言っても、要点だけなのか、全部なのか、場合によってはincludeって何?とかmain()って何?とかも具体的に説明しないといけませんか。

そんなの人に頼りすぎです。もう少し、質問を絞ってください。
    • good
    • 0

ユニークなのか'0'または'1'なのかどっちでしょうか?


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

この回答への補足

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

補足日時:2006/12/20 18:40
    • good
    • 0

どーゆーフォーマットなのか教えて下さい。


空白区切りで区分はユニークな数字って事でいいんでしょうか。
とりあえず何とかなりそうなソース置いときます。

int main(){system("grep ^0 A.txt > B.txt");return 0;}

この回答への補足

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

補足日時:2006/12/18 19:09
    • good
    • 0

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

補足日時:2006/12/18 13:46
    • good
    • 0

#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

補足日時:2006/12/18 13:52
    • good
    • 0

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

この回答への補足

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

補足日時:2006/12/18 12:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!