我想计算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(消耗的字节数)。这种(愚蠢的)行为标准/平台是否具体?还是个bug?
我知道strtok或regular-expression打包,但我本来希望使用标准方法,而使用strtok的想法让我内心的软件工程师呕吐。
TIA
答案 0 :(得分:0)
您的解决方案很难,更容易:
char *s="1,2,3,4";
int n,i;
while( 1==sscanf(s,"%d%n",&i,&n) && (s+=n,*s==','?++s:!*s) )
printf("%d\n",i);