csvファイルをcで読み込むときの注意
2010年7月31日 ゲームリソースファイルの例
えんぴつ,50
けしごむ,100
と、入ってたとするじゃん。
これを、以下の構造体配列にぶっこむ。
struct List{
char name[16];
int price;
}
struct List list[16]
これを読む込むとすると
fscanf(fp"%s,%d",list[i].name, &list[i].price);
普通に考えると、iをインクリメントしながら、一行ずつ読む込むわけじゃん。
で、これを実際にやると、
list[0].name=えんぴつ,50
list[0].price=????(初期化されず)
となっちゃうんですよ。
でも一方で、区切り文字を半角スペースで出力した場合、
fscanf(fp"%s半角スペース%d",list[i].name, &list[i].price);
となるわけです。これを実際にやると、
list[0].name=えんぴつ
list[0].price=50
当然といえば当然ですが、こうなります。
半角スペースはcでは区切りと認識されるが、,は区切り文字として認識してくれないので、文字列に格納されちゃうわけですね。
というわけで、csvファイルをcで読み込ませるときに文字データが混ざっている場合は、区切り文字を半角スペースにすると楽に処理できます。
えんぴつ,50
けしごむ,100
と、入ってたとするじゃん。
これを、以下の構造体配列にぶっこむ。
struct List{
char name[16];
int price;
}
struct List list[16]
これを読む込むとすると
fscanf(fp"%s,%d",list[i].name, &list[i].price);
普通に考えると、iをインクリメントしながら、一行ずつ読む込むわけじゃん。
で、これを実際にやると、
list[0].name=えんぴつ,50
list[0].price=????(初期化されず)
となっちゃうんですよ。
でも一方で、区切り文字を半角スペースで出力した場合、
fscanf(fp"%s半角スペース%d",list[i].name, &list[i].price);
となるわけです。これを実際にやると、
list[0].name=えんぴつ
list[0].price=50
当然といえば当然ですが、こうなります。
半角スペースはcでは区切りと認識されるが、,は区切り文字として認識してくれないので、文字列に格納されちゃうわけですね。
というわけで、csvファイルをcで読み込ませるときに文字データが混ざっている場合は、区切り文字を半角スペースにすると楽に処理できます。
コメント