c言語 sscanf の書式についての質問です
C言語でCSVファイルの読み込みをしようとしています。CSVの中身は以下の2通りあります。
・[ ] で囲った文字列(1行に1つだけ)
・データの並び(1行に2つ以上)
具体的には、[ ] で囲った文字列と、最初の2つのデータのみが抽出対象です。そこで以下のコードを書いてみましたが、最後に示すように、[ ] で囲った文字列がうまく抽出できません。以下のコードのようなsscanfの使い方は間違っているのでしょうか?正しく動作するにはどうすればよいか、教えて下さい。
---------- 以下、ソースコード
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *fp;
char *fname = "test.csv";
char s1[32], s2[16];
int ret;
char str[128]; /* csvファイルの一行 */
char structName[32]; /* セパレータ名 */
fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
}
while( fgets( str, 128, fp ) != NULL ){
/* セパレータ */
if( str[0] == '[' ){
printf( "str = %s\n", str );
ret = sscanf( str, "[%s]\n", structName );
printf( "structName = %s\n", structName );
continue;
}
ret = sscanf( str, "%[^,],%[^,]", s1, s2 );
printf( "s1 = %s\n", s1 );
printf( "s2 = %s\n", s2 );
}
fclose( fp );
return ret;
}
---------- 以下、"test.csv"の中身
[ABC]
test01,10,11,1.0,1.1
test02,20,21,2.0,2.1
test03,30,31,3.0,3.1
[DEF]
test04,40,41,4.0,4.1
---------- 以下、実行結果
str = [ABC]
structName = ABC]
s1 = test01
s2 = 10
s1 = test02
s2 = 20
s1 = test03
s2 = 30
str = [DEF]
structName = DEF]
s1 = test04
s2 = 40