Как удалить определенную строку в текстовом файле? - PullRequest
0 голосов
/ 04 декабря 2010

Можете ли вы помочь мне написать программу, которая удаляет определенную строку в текстовом файле.

Я планирую использовать:

  1. fgets захватывает строку из текстового файла и сохраняет ее в массиве, но я был озадачен, как fgets хранит строку в массиве (захватывает ли она строку и сохраняет ли она в первом и следующем индексах когда он захватывает строку, это будет сохранено в следующем индексе или просто перезапишет первый индекс массива?)

  2. если строка была сохранена в разных индексах, то у меня возникнет условие, которое сравнивает ввод пользователя с захваченной строкой fgets, и если она равна, она пропустит строку и выполнит правило, пока не достигнет конец файла.

  3. затем я закрою текстовый файл, как этот fclose (stream), и снова открою его как "wt", чтобы перезаписать все, что написано в файле.

Имею ли я правильную логику ... или вы можете предложить лучшие решения ... надеюсь, вы поможете мне понять, как fgets хранит строку в массиве ...

Кстати, вот код, который я пытаюсь проверить:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct studentinfo{
       char id[8];
       char name[30];
       char course[5];
}s1;
int main(void){
     FILE *stream = NULL;
     stream = fopen("studentinfo.txt", "rt");

     char arr[100];
     int i=0;

    while(!feof(stream)){  
     fgets(arr, 100, stream);
     printf("%s", arr);
     }
     fclose(stream);
/*planning to reopen the stream but will change "rt" to "wt"*/

     getch();
}

1 Ответ

1 голос
/ 04 декабря 2010

Ну, если позволяет дисковое пространство, я бы сделал следующее:

  • открыть входной файл для чтения
  • открыть временный файл (в том же каталоге) для записи
  • пока не в конце входного файла:
    • чтение строки из входного файла
    • если она не равна искомой строке, запишите ее в выходной файл
  • закрыть оба файла
  • удалить входной файл
  • переименовать временный файл, присвоив ему имя входного файла

Это позволяет избежать необходимости хранить (почти) весь файл в памяти.

Также не страдает проблема, связанная с тем, что если ваша программа умирает (или погибает) в середине записи файла, часть вашего входного файла может быть потеряна навсегда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...