【发布时间】:2011-11-12 16:52:58
【问题描述】:
考虑到其元素的字符串模式,我想计算 CSV 文件中的“列”,例如
1,2,3,4
带有模式“%d”的应该返回 4。
我写了一个这样的分词器
offset = 0;
strcpy(var_pattern, pattern) // e.g. pattern = "%d,"
strcat(var_pattern, "%n")
while (sscanf(&line[offset], LINE_SIZE, buf,var_pattern,&bytes_consumed > 0) {
count++; // column counter
offset += bytes_consumed
};
我遇到的问题是 CSV 文件行中的最后一个元素在示例中缺少分隔符“,”。在 linux64/gcc 上做
c = sscanf("12","%d,%n",&a,&b)
给出 c=1(匹配的模式数)、a=12 和 b=32767(消耗的字节数)。这是(愚蠢的)行为标准/平台特定的吗?还是错误?
我知道 strtok 或正则表达式打包,但我想使用标准方法,使用 strtok 的想法让我内心的软件工程师呕吐。
TIA
【问题讨论】: