複数のtxtファイルを整理して統合

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ひよこ丸

複数のtxtファイルを整理して統合

#1

投稿記事 by ひよこ丸 » 13年前

初めて掲示板を利用させていただきます。はじめまして、ひよこ丸と申します。
最近C言語の勉強を始めた者ですがよろしくお願いします

件名の通りなのですが、複数のtxtファイルの内容を整理して統合するプログラムを作ろうと思っています
例えば2つのtxtファイルがあるとしてtest.txtには

AAA
AAA
BBB
BBB
CCC

という内容で、test2.txtには

QQQ
RRR
SSS
TTT
YYY

という内容である場合に新しくtest3.txtというファイルで

AAA,QQQ,RRR
BBB,SSS,TTT
CCC,YYY

作成したいと思っています。

test.txtの内容に書かれているものを親として
test2.txtの内容に書かれているものを子として整理して統合。といったプログラムなのですが
良いアイディアが浮かびません…もし宜しかったらアドバイスをお願いします

かずま

Re: 複数のtxtファイルを整理して統合

#2

投稿記事 by かずま » 13年前

次のプログラムの各行が何をしているのかを説明してください。
分からないところがあれば、どこが分からないのかを質問してください。

コード:

    char *nl = "", *p, buf1[256], buf2[256], name[256];

    while (fgets(buf1, sizeof(buf1), fp1) && fgets(buf2, sizeof(buf2), fp2)) { 
        if (p = strchr(buf1, '\n')) *p = '\0'; 
        if (p = strchr(buf2, '\n')) *p = '\0'; 
        if (!strcmp(buf1, name))
            fprintf(fp3, ",%s", buf2);
        else {  
            strcpy(name, buf1);
            fprintf(fp3, "%s%s,%s", nl, name, buf2);
            nl = "\n"; 
        }       
    }
    fputc('\n', fp3);

ひよこ丸

Re: 複数のtxtファイルを整理して統合

#3

投稿記事 by ひよこ丸 » 13年前

かずまさん、返信ありがとうございます
間違いだらけかもしれませんが説明をします

以下の処理をfp1とfp2の行数回繰り返す
buf1の内容から改行を探索し見つかったら*pにヌル文字を入れる
buf2の内容から改行を探索し見つかったら*pにヌル文字を入れる
buf1とnameの比較を行い一致したらbuf2の内容をfp3出力する
そうでないならbuf1の内容をnameにコピーし、(nl)(name),(buf2)をfp3に出力し、nlに改行を入れる

繰り返しが終わったらfp3に改行を入れる

以上になります。わからないところと言えば6行目の"!strcmp"の"!"です
これは否定の"!"なのでしょうか

ご指摘をよろしくお願いします

かずま

Re: 複数のtxtファイルを整理して統合

#4

投稿記事 by かずま » 13年前

訂正。while の前に name[0] = '\0'; が必要です。

コード:

    char *nl = "";   // 改行文字は最初は無し
    name[0] = '\0'; // 親の名前は最初は無し
    while ((fp1 から buf1 へ 1行読み込み) && (fp2 から buf2 へ 1行読み込み)) {
        buf1 から改行文字を削除;
        buf2 から改行文字を削除;
        if (buf1 と name が等しければ)
            "," と buf2 を fp3 に出力
        else { // そうでなければ、新しい親の名前
            name に buf1 をコピー;
			改行、name、","、buf2 を fp3 に出力
            nl に改行文字の設定
        }       
    }
    改行を fp3 に出力;
ひよこ丸 さんが書きました: 以上になります。わからないところと言えば6行目の"!strcmp"の"!"です
これは否定の"!"なのでしょうか
!strcmp(buf1, name) は strcmp(buf1, name) == 0 と同じです。

ひよこ丸

Re: 複数のtxtファイルを整理して統合

#5

投稿記事 by ひよこ丸 » 13年前

かずまさん、早速のお返事ありがとうございます。

!strcmp(buf1, name) は strcmp(buf1, name) == 0 と同じなんですね。勉強になります



すみません、一つ本当に初歩的な質問よろしいでしょうか?

while ((fp1 から buf1 へ 1行読み込み) && (fp2 から buf2 へ 1行読み込み)) {

の部分なのですが、fp1,fp2にはtxtファイルの内容が入っていてbuf1,buf2に1行ずつ読み込む。とのことですが
txtファイルの内容をfp1,fp2に入れるのはどのようにすればいいのでしょうか…

ひよこ丸

Re: 複数のtxtファイルを整理して統合

#6

投稿記事 by ひよこ丸 » 13年前

すみません、自己解決しました

fp = fopen(fname, "r");や fp = fopen(fname, "w");

を使うんでしたね。かずまさん、本当にありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る