2017-01-09 141 views
2

嗨,大家好我有一个被称为dictionary.txt的文本文件。基本上我做了两个选择的菜单,1.添加新单词到字典和2.从字典中删除单词。现在我设法做菜单并添加新单词。但是,我坚持从文件中删除。我希望当用户输入例如“跑步者”时,该词将在dictionary.txt中搜索并被删除。为了告诉你我在学校还没有完成的一切,但我正在寻找一些想法,以便我可以继续完成这项任务。我已经尝试了一些东西,但正如我已经告诉过你的,我还没有覆盖它,所以我不知道如何去做。我感谢所有的帮助。下面是我的程序。如何从文本文件中删除?


+7

您无法在文件的开始,中间或结尾处按某个按钮,某处并删除某些内容。您必须阅读文件的现有内容,并创建一个新文件,而不删除部分。 –

+1

为什么downvote?在这个问题上我没有发现任何奇怪的东西。 –

+0

@SamVarshavchik是的,我意识到这一点。我看到有一个函数fgets()可用于从文本文件读取一行并将其存储到指向的字符串中。然而,我不知道我将如何应用它。因为我想将其替换为没有任何内容的字符串,因为我想删除它。 –

回答

5
  • 你打开两个文件:你得到的一个(阅读)和一个新的(写作)。
  • 循环读取每行的第一个文件。
  • 您可以将每行的内容与您需要删除的单词进行比较。
  • 如果该行与任何删除词不匹配,则将其写入新文件。

Josuel,由理查德·厄尔文从我前面回答的问题采取

您可以使用下面的代码:

#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。它需要关心操作文件内容,但需要额外的库。这种方式比建议的更复杂 – user5821508

4

没有办法删除一个文件的东西。文件系统不支持它。

那如何修改该文件的内容:

  • 删除整个文件内容(无论何时打开用于写入的文件,它发生在默认情况下)
  • 删除文件本身
  • 重写一些一个文件的一部分,由相同的字节数
  • 追加到文件的末尾更换几个字节

因此,要删除单词,您应该将整个文件读入内存,删除该单词,然后重写它,或者用空格(或任何其他字符)替换该单词。