C言語関係掲示板

過去ログ

No.344.特定の文字列を含んだ行を異なるファイルとして抽出

[戻る] [ホームページ]
No.2191

大学で課題が出たのですが……。
投稿者---雀帝(2002/07/25 23:19:35)


テキストファイルのある特定の文字列を含んだ行を異なるファイルとして抽出するプログラムをCで2〜3種類作る、という課題が出たのですが……

main(int argc, char * argv[])
{
 char cmd[4096];
 sprintf(cmd, "fgrep %s > %s", argv[1], argv[2]);
 system(cmd);
}

main(int argc, char * argv[])
{
 char cmd[4096];
 sprintf(cmd, "grep -F %s > %s", argv[1], argv[2]);
 system(cmd);
}

……いいのが思い浮かびません。上記のじゃうまくいかなくて……。
ご教授ねがえますか?

No.2199

Re:大学で課題が出たのですが……。
投稿者---とおりすがり(2002/07/26 10:56:05)


こんなものでいかがでしょうか?


#include <stdio.h>
#include <string.h>

#define         TURE                    0
#define         FALSE                   -1
#define         D_IF_BUF_LEN    256

int main(int argc, char *argv[]) 
{
        FILE    *fp_in;
        FILE    *fp_out;
        char    buf[D_IF_BUF_LEN];
        int             i;
        
                                /******************************/
                                /* inputファイルのオープン	  */
        fp_in = fopen("input.txt","r");
        if(fp_in == NULL)
        {
                printf("INPUT FILE NOT OPEN\n");
                return(FALSE);
        }
                                /******************************/
                                /* outputファイルのオープン	  */
        fp_out = fopen("output.txt","w");
        if(fp_out == NULL)
        {
                printf("OUTPUT FILE NOT OPEN\n");
                return(FALSE);
        }
                                /******************************/
                                /* ファイルの読込み           */
        while(fgets(buf,D_IF_BUF_LEN,fp_in)!=NULL)
        {
                i = 1;
                while(i < argc)
                {
                                                /******************************/
                                                /* 文字列が含まれるかチェック */
                        if(strstr(buf,argv[i])!=NULL)
                        {
                                                /******************************/
                                                /* ファイルへの書き出し       */
                                fprintf(fp_out,"%s",buf);
                        }
                        i++;
                }
        }
        return(TURE);
}



No.2202

m(_ _)m
投稿者---雀帝(2002/07/26 13:48:37)


どうもありがとうございます! これから大学のPCで試してみますね。

No.2206

Re:m(_ _)m
投稿者---とおりすがり(2002/07/26 14:42:24)


ごめんなさい!
さっきのソースは、開いたファイルのクローズをしていませんでした。
最後に、fclose()を加えておいてください。