【发布时间】:2016-03-08 23:05:14
【问题描述】:
我正在用 C 语言编写一个程序,它处理一个文本文件并跟踪每个唯一的单词(通过使用一个结构体,该结构体具有一个单词的 char 数组和一个出现次数的计数)并将这个结构体存储到一种数据结构。但是,作业包括:“整个 txt 文件可能非常大,无法保存在主内存中。请在您的程序中考虑这一点。”
课后我问他,他说一次读取文本文件 X 行(我认为他的建议是 20,000 行?),分析它们并更新结构,直到你读完文件。
谁能帮助解释执行此操作的最佳方法并告诉我要使用哪些功能?我对 C 非常非常陌生。
(我当前的程序对于小文件是准确和正确的,我只需要让它适应大文件)。
非常感谢!!
编辑:
fp = fopen(argv[w], "r");
if ((fp) == NULL){
fprintf( stderr, "Input file %s cannot be opened.\n", argv[w] );
return 2;
}
/* other parts of my program here */
char s[MaxWordSize];
while (fscanf(fp,"%s",s) != EOF){
nonAlphabeticDelete(s); // removes non letter characters
toLowerCase(s); //converts the string to lowercase
//attempts to add to data structure
pthread_mutex_lock(&lock);
add(words, &q, s);
pthread_mutex_unlock(&lock);
}
这行得通,我只需要将它调整为一次通过文本文件走 X 行。
【问题讨论】:
-
分享您的一些代码,以便我们为您提供更好的答案...
-
好像老师要你分配20k的内存块,用
fread一次读取那么多字节然后处理那个块。 -
这看起来您并没有将整个文件读入内存?我认为大文本文件不会有问题。
-
@maxton 我和我的教授之间存在严重的语言障碍,这就是他给我的,所以这就是我必须得到的所有信息...... :(
-
我认为您的教授可能假设您会将整个文件读入内存,然后对其进行解析。但是您一次只能从磁盘中读取一个单词。读取 20k 行然后解析它们会降低程序的内存效率!