2017-01-09 4 views
2

Привет, ребята У меня есть текстовый файл, который известен как dictionary.txt. В основном я делаю меню из двух вариантов: 1. добавляю новые слова в словарь и 2. удаляю слова из словаря. прямо сейчас мне удалось сделать меню и добавить новые слова. Тем не менее, я застрял в удалении из файла. Я хочу, чтобы, когда пользователь вводит, например, «бегунов», слово выполняется в словаре.txt, и оно удаляется. Чтобы рассказать вам все, что я еще не рассматривал в школе, но я ищу здесь некоторые идеи, чтобы я мог продолжить работу. Я пробовал кое-что, но, как я уже сказал вам, я еще не рассказал об этом, поэтому не знаю, как это сделать на самом деле. Я ценю всю помощь. ниже моя программа.Как удалить из текстового файла?


+7

Вы не можете нажать кнопку где-нибудь и удалить что-то с начала, середины или конца файла. Вы должны прочитать существующее содержимое файла и создать новый файл без удаленных частей. –

+1

Почему downvote? В этом вопросе я не нахожу ничего странного. –

+0

@SamVarshavchik да, я знаю об этом. Я видел, что существует функция fgets(), которая может применяться для чтения строки из текстового файла и сохраняет ее в указанной строке. однако, я не знаю, как я собираюсь применить его. Поскольку я хочу заменить эту строку ничем, поскольку я хочу ее удалить. –

ответ

5
  • Вы открываете два файла: тот, который у вас есть (для чтения) и новый (для записи).
  • Вы прокручиваете первый файл, просматривая каждую строку по очереди.
  • Вы сравниваете содержимое каждой строки со словами, которые необходимо удалить.
  • Если строка не соответствует ни одному из слов удаления, вы записываете ее в новый файл.

Josuel, взятый из моего ранее ответили вопрос Ричарда Urwin

Вы можете использовать следующий код:

#include <stdio.h> 

    int main() 
    { 
     FILE *fileptr1, *fileptr2; 
     char filename[40]; 
     char ch; 
     int delete_line, temp = 1; 

     printf("Enter file name: "); 
     scanf("%s", filename); 
     //open file in read mode 
     fileptr1 = fopen("c:\\CTEMP\\Dictionary.txt", "r"); 
     ch = getc(fileptr1); 
     while (ch != EOF) 
     { 
      printf("%c", ch); 
      ch = getc(fileptr1); 
     } 
     //rewind 
     rewind(fileptr1); 
     printf(" \n Enter line number of the line to be deleted:"); 
     scanf("%d", &delete_line); 
     //open new file in write mode 
     fileptr2 = fopen("replica.c", "w"); 
     ch = getc(fileptr1); 
     while (ch != EOF) 
     { 
      ch = getc(fileptr1); 
      if (ch == '\n') 
      { 
       temp++; 
      } 
      //except the line to be deleted 
      if (temp != delete_line) 
      { 
       //copy all lines in file replica.c 
       putc(ch, fileptr2); 
      } 
     } 
     fclose(fileptr1); 
     fclose(fileptr2); 
     remove("c:\\CTEMP\\Dictionary.txt"); 
     //rename the file replica.c to original name 
     rename("replica.c", "c:\\CTEMP\\Dictionary.txt"); 
     printf("\n The contents of file after being modified are as follows:\n"); 
     fileptr1 = fopen("c:\\CTEMP\\Dictionary.txt", "r"); 
     ch = getc(fileptr1); 
     while (ch != EOF) 
     { 
      printf("%c", ch); 
      ch = getc(fileptr1); 
     } 
     fclose(fileptr1); 
     scanf_s("%d"); 
     return 0; 

    } 
3

вы можете открыть файл в двоичном режиме, чтобы затем загрузить содержимое в строку или массив строк, то сделать испытующе/удаление/редактирование на строку, после чего удалите содержимое файла и, наконец, вы пишете новое содержимое в файл.

+0

Спасибо за ваш ответ, но я ищу что-то более простое. –

+1

@JosuelSpiteri Вот как делается большая часть редактирования файлов. Вы читаете все содержимое; хранить его в памяти; манипулировать им; и переместите ** новое ** содержимое в файл снова. – mr5

+0

или вы должны попробовать SQL. он заботится о содержимом файла manulatig, но требует дополнительных библиотек. И этот путь более сложный, чем предлагалось – user5821508

4

Там нет никакого способа, чтобы удалить что-то из файла. Файловые системы не поддерживают его.

То, как вы можете изменить содержимое файла:

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

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

Смежные вопросы