0

「Applicat」という単語を検索し、行全体を置き換えるコードがあります。現在、1行ではなく2行を検索して置換しようとしていますが、少し問題があります。テキスト ファイルの例を次に示します。

名前: 1234

申請者: ft_link

日付: 今日

スクリプトでテキスト ファイルを次のように変更できるようにしたいと考えています。

名前: 5678

申請者:なし

日付: 明日

これまでのところ私のコードは機能しますが、Applicat 行が複数回複製されます...ここで何が間違っていますか? 前もって感謝します!

これが私のコードです:

FILE *input = fopen(buffer1, "r");       /* open file to read */
FILE *output = fopen("temp.txt", "w");

char buffer[512];
while (fgets(buffer, sizeof(buffer), input) != NULL)
    {

static const char text_to_find[] = "Applicat:";     /* String to search for */

static const char text_to_replace[] = "Applicat: None\n";   /* Replacement string */


static const char text_to_find2[] = "Name";     /* String to search for */

static const char text_to_replace2[] = "Name: 5678\n";  /* Replacement string */


char *pos = strstr(buffer, text_to_find);
if (pos != NULL)
{
fputs(text_to_replace, output);

}

char *pos2 = strstr(buffer, text_to_find2);
if (pos2 != NULL)
{
fputs(text_to_replace2, output);

}
else
fputs(buffer, output);




    }
4

2 に答える 2

1

変化する

char *pos = strstr(buffer, text_to_find);
if (pos != NULL)
{
fputs(text_to_replace, output);

}

char *pos2 = strstr(buffer, text_to_find2);
if (pos2 != NULL)
{
fputs(text_to_replace2, output);

}
else
fputs(buffer, output);

これに:

char *pos = strstr(buffer, text_to_find);
if (pos != NULL)
{
fputs(text_to_replace, output);

}

char *pos2 = strstr(buffer, text_to_find2);
if (pos2 != NULL)
{
fputs(text_to_replace2, output);

}

if(pos==NULL && pos2==NULL)
   fputs(buffer, output);

またはあなたがもっと好きなら

char *pos = strstr(buffer, text_to_find);
char *pos2 = strstr(buffer, text_to_find2);

if(pos==NULL && pos2==NULL)
   fputs(buffer, output);

if (pos2 != NULL)
    fputs(text_to_replace2, output);

if (pos != NULL)
    fputs(text_to_replace, output);
于 2013-11-14T00:00:59.200 に答える
1

あなたはちょうど逃したelse:

char *pos = strstr(buffer, text_to_find);
char *pos2 = strstr(buffer, text_to_find2);
if (pos != NULL) {
    fputs(text_to_replace, output);
} else if (pos2 != NULL) {
    fputs(text_to_replace2, output);
} else
    fputs(buffer, output);
于 2013-11-14T00:02:18.550 に答える