【发布时间】:2011-12-23 05:16:07
【问题描述】:
我在 C 中使用以下程序来过滤大约 200,000 行的日志文件。但是程序在大约 12000 行后停止响应。任何解释为什么会发生这种情况以及任何解决方案? 代码在 GCC (windows) 中编译。
PS:代码执行正常,并为小文件提供所需的输出。
#include<stdio.h>
#include<string.h>
int check(char *url)
{
//some code to filter the data and return either 0 or 1 depending upon input
}
int main()
{
FILE *fpi, *fpo;
fpi=fopen("access.log","r");
fpo=fopen("edited\\filter.txt","w");
char date[11],time[9],ip[16],url[500],temp[3];
while(!feof(fpi))
{
printf(".");
fscanf(fpi," %s %s %s %s %s %s",date,time,temp,ip,temp,url);
if(check(url))
fprintf(fpo,"%s %s %s %s %s %s\n",date,time,temp,ip,temp,url);
}
fclose(fpi);
fclose(fpo);
printf("\n\n\nDONE! :)");
return 0;
}
【问题讨论】:
-
您确定文件格式正确吗?
fscanf不允许有任何偏差。尝试删除前 12000 行,看看它是否是数据中的问题。还可以尝试增大缓冲区大小。 -
FWIW,这听起来像是
awk的工作。 -
哦,是的,我增加了缓冲区大小及其工作...谢谢