Замена подстроки из файла .txt и запись в новый файл .txt прекращаются после 1 строки IN C - PullRequest
1 голос
/ 27 февраля 2020

Первый раз постер извините, если это не ясно. Я пытаюсь заменить искомое слово в текстовом файле с заданным словом по всему тексту. Он работает для первой строки, но не дальше go. Спасибо за любую помощь. моя проблемная часть заключается в следующем: все ниже и ниже:

FILE *input_file = fopen("sentences_test.txt", "r");
char line [LINE_LENGTH];

FILE *write_file = fopen("replaced.txt", "w"); 

while (fgets(line, LINE_LENGTH, input_file) != NULL)
    {
    remove_newline(line);
    char *currentWord;
    currentWord = strtok(line, "\n ,.-");


while (currentWord != NULL)
        {
        if (strcmp(search, currentWord)==0 && replace != " ") 
        {
            printf("%s\n", currentWord);


                fprintf (write_file, "%s\n", replace);
        }
else {
      fprintf(write_file, "%s\n", currentWord);

     }
currentWord = strtok(NULL, "\n ,.-");
        }
fclose (write_file);    
fclose(input_file);

//// ВСЁ

#include <stdio.h>
#include<stdlib.h>
#include <string.h> 
#define LINE_LENGTH 5000

void remove_newline(char *str)
{
int len =strlen (str);

if (len>0 &&str[len -1] == '\n')
    str[len -1] = '\0';
}

int main(int argc, char **argv)
{
    char search[50];
    printf("\n What would you like to search for? ");

    fgets(search,50,stdin);

    int slen = strlen(search);
    printf("%s\n", search);
    remove_newline(search);

    char replace[50];
    printf("Replace word?");
    fgets(replace, 50, stdin);

    FILE *input_file = fopen("sentences_test.txt", "r");
    char line [LINE_LENGTH];

    FILE *write_file = fopen("replaced.txt", "w"); 

    while (fgets(line, LINE_LENGTH, input_file) != NULL)
        {
        remove_newline(line);
        char *currentWord;
        currentWord = strtok(line, "\n ,.-");


        while (currentWord != NULL)
                {
                if (strcmp(search, currentWord)==0 && replace != " ") 
                {
                    printf("%s\n", currentWord);


                        fprintf (write_file, "%s\n", replace);
                }
        else {
              fprintf(write_file, "%s\n", currentWord);

             }
        currentWord = strtok(NULL, "\n ,.-");
                }
        fclose (write_file);    
        fclose(input_file);



    }
return 0;
}

пример вывода is search: заменено на: REPLACE!

TEXT FILE: C is REPLACE!

наиболее часто используемый язык программирования для написания операционных систем Первая операционная система, написанная на C is Unix Более поздние операционные системы, такие как Linux, были все написаны на C Мало того, что C REPLACE!

язык операционных систем - это REPLACE!

предшественник и вдохновение почти для всех REPLACE!

самых популярных языков высокого уровня, доступных сегодня. Фактически Perl PHP Python и Ruby все написаны в C

ФАЙЛ ЕСТЬ БОЛЬШЕ, ЧЕМ ЭТО

1 Ответ

0 голосов
/ 29 февраля 2020

относительно:

    fclose (write_file);    
    fclose(input_file);
}  <<-- end of `while reading lines of input file
return 0;

Когда 'read каждую строку' l oop завершает одну итерацию, файлы закрываются, поэтому следующий вызов fgets() завершается неудачно и l oop завершается .

Вот почему обрабатывается только первая строка.

Предложите переместить вызовы на fclose() ПОСЛЕ окончания «прочитать каждую строку» while() l oop

...