【发布时间】:2017-10-19 17:24:07
【问题描述】:
我有一个文件,如下所示:
1-3-5 2 1
2 3-4-1 2
4-1 2-41-2 3-4
我想返回这个文件的列数。我正在用 C 中的 mmap 读取文件。到目前为止,我一直在尝试使用 strtok(),但失败了。这只是一个测试文件,我的原始文件是 GB 级的。
pmap = mmap(0,mystat.st_size,PROT_READ|PROT_WRITE,MAP_PRIVATE,fd,0);
char *start = pmap;
char *token;
token = strtok(start, "\t");
while (token != NULL){
printf("%s \n",token);
token = strtok(NULL, "\t");
col_len++;
}
我一直在尝试这些方法,但显然存在逻辑错误。我得到以下输出:
number of cols = 1
虽然,列数应该是 3。
如果你们能提供有关如何使用 mmap 解析此类文件的任何想法,那就太好了。
我使用 mmap 是因为对文件的单次传递执行速度更快。
【问题讨论】:
-
strtok在mmap'd 文件上可能是个坏主意,它会修改您的文件。您可以自己迭代字符。 -
是的,我明白了。但是,由于数据规模庞大,我想节省计算时间。 strtok 只是让您解析分隔符,这很有用。因此,在这里寻求一些输入
-
为什么不在 getc() 上循环并将 '\t 和 '\n' 作为字段/行分隔符处理?