2011-11-12 15 views
1

CSVファイル内の "列"をカウントしたい場合、その要素の文字列パターンを指定します。scanf( "...%n"、...)失敗した一致の場合

パターンと
1,2,3,4 

"%dを、" 例では '' 私は私が持っている問題は、不足している区切り文字です。この

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

のようなトークナイザを書い4.

返す必要がありますCSVファイル行の最後の要素に適用されます。

c = sscanf("12","%d,%n",&a,&b) 

行うLINUX64/GCCでC = 1(一致したパターンの数)= 12およびb = 32767(消費されたバイト)を与えます。これは(馬鹿馬鹿しい)行動の標準/プラットフォーム特有ですか?バグですか?

私はstrtokや正規表現がパッケージ化されていることを知っていますが、標準的な方法を使いたいと思っていました。

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); 
関連する問題