cファイル処理の問題

c
cファイル処理の問題

こんにちはすべての人は、私が次のテキストファイルを持っている問題で私を助けることができます

hi Hello this is my Hello to
 the Hello world

私は次のcでコードを書きます

#include
#include
#include

void main()
{
    FILE *fp,*fout;
    int i=0,len_string;
    char SearchText[]="Hello"; /* You can replace this text */
    char ReplaceText[]="Help"; /*You can also replace this text. */
    char temp[30];
    fp=fopen("ram.txt","a+");
    fout=fopen("temp.txt","a+");
    rewind(fp); /* for going to start of file. */
    if(fp==NULL || fout==NULL)
    {
        printf("File couldn't be opened ");
        exit(0);
    }
    len_string=strlen(SearchText);
    while(!feof(fp))
    {
        for(i=0;i

今、私の出力はそのようなものです

hi Hello this is my Hello to
 the Hello world

私が間違っていることを助けてください。 テキストファイルで役立つようにHelloを置き換える方法は? そのような私の出力を取得するには?

hi Help this is my Hello to
 the Help world

誰でもコードで説明できますか?

  0  0


ベストアンサー

文字列「Hello」を5文字のグループで検索しています。 したがって、次のようにファイルを見ています。

hi He
llo t
his i
s my
Hello
 to\n
the H
ello
world

探しているものと一致するのは、そのうちの1つだけです。 おそらくファイルを1行ずつ(必要に応じて、より大きなバッファーを使用して)読み、検索テキストの各行で検索/置換する必要があります。

さらに、失敗すると0を終了し、成功すると1を終了します(これは逆方向です。0は成功を意味し、それ以外はすべて失敗を意味します)。 そして、あなたは最初の試合が終わった後、より多くを探し続けるのではなく終了します。

行ごとに読み取り、検索/置換を実行するには、次のようにします。

FILE *f = ...;
char buf[1024];
while (fgets(buf, sizeof(buf), f)) {
    char *pos;
    while ((pos = strstr(buf, search)) != NULL) {
        char temp = *pos;
        *pos = 0;
        fprintf(out, "%s%s", buf, replace);
        *pos = temp;
        buf = pos + strlen(search);
    }
    fprintf(out, "%s", buf);
}

これは理想的ではありません。長い行(1023文字以上)が検索トークンの途中で分割される可能性があるためですが、ほとんどの場合は機能します。

2


一時的な文字配列に1行ずつ読み込み、strstrを使用してhelloを見つけると、処理が高速になります。 strstr関数を確認してください。

0


#include
#include
#define BUF_LEN 100
#define STR_REQ "Hello"
main()
{
    FILE * read_file, * write_file;
    read_file = fopen("file_read.dat", "r");
    if(read_file == NULL)
    {
        perror("Unable to open file for reading");
        exit(-1);
    }
    else
    {
        write_file = fopen("file_write.dat", "w");
        if(write_file == NULL)
        {
            perror("Unable to open file for writing");
            exit(-1);
        }
        else
        {
            char temp_buf[BUF_LEN], req_buf[BUF_LEN+strlen(STR_REQ)+10];
            char * index;
            while(!feof(read_file))
            {
                memset(temp_buf, 0, BUF_LEN);
                fscanf(read_file, "%[^\n]", temp_buf);
                fgetc(read_file);           /*To remove \n at last*/
                index = strstr(temp_buf, STR_REQ);
                if( index !=NULL )
                {

                    memset(req_buf, 0, BUF_LEN+strlen(STR_REQ)+10);
                    //strncpy(req_buf, temp_buf, index-temp_buf);
                    memcpy(req_buf, temp_buf, index - temp_buf);                /*This will copy upto the match*/

                    strcat(req_buf, "Help ");                                           /*Copy the help word*/

                    strcat(req_buf, index+strlen(STR_REQ));

                }
                else
                {
                    strcpy(req_buf, temp_buf);
                }
                fprintf(write_file, "%s\n", req_buf);
            }

        }
    }
}

このコードを持っている.. それは動作するはずです…​ 質問があれば私に聞いてください

0


タイトルとURLをコピーしました