2011-11-12 33 views
1

我想計算CSV文件中的「列」,因爲它的元素的字符串模式是例如。未能匹配的scanf(「...%n」,...)

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(的匹配的模式號),= 12和b = 32767(消耗的字節)。這(愚蠢的)行爲標準/平臺是否具體?還是一個錯誤?

我知道strtok或正則表達式打包,但我會喜歡使用標準方法,並且使用strtok的想法使我內在的軟件工程師puke。

TIA

回答

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);