ページ 11

fscanfでカンマ区切りの文字列を読み出したい

Posted: 2008年10月31日(金) 09:59
by 山崎
何度もお世話になっております、山崎です。
今回は、fscanf(本当はDXライブラリのFileRead_scanfなのですが)について
皆様のお知恵を貸してほしいと思い参りました。

現在、マップの内容が記述されたテキストファイルを読み込み、
マップのために確保された構造体の配列にファイルの内容を格納する処理を作っております。

読み込むテキストファイルには、

130,1 130,1 140,2 150,3
130,2 140,2 100,4 200,4
...
...

このように、short intとunsigned charが
スペースとカンマに区切られてたくさん記述されております。
「130,1」でひとつの構造体の内容を表しております。
カンマの前の数値をshort intへ格納し、カンマの後ろの文字をunsigned charに格納したいと思っています。

このファイルを読み込んで最終的には構造体のメンバに次々内容を格納していきたいと思い
次のコードを試しに書いたのですが、ビルドは通るのですが実行時エラーとなります。
なお、下のコードはテストのため、ファイルの全てを読み込まず最初の一行だけ読み込んでいます。

//"testtext.txt"は読み込むファイル名
short int testBuf;
unsigned char testBuf2;
int testMapFileHandle=FileRead_open("testtext.txt");
FileRead_scanf(testMapFileHandle,"%d,%c ",testBuf,testBuf2);
printfDx("%d\n%c\n",testBuf,testBuf2);
FileRead_close(testMapFileHandle);

どうすればファイルのカンマとスペースで区切られた文字列を、
short intとunsigned charに読み出すことができるのでしょうか。
基本的な質問かもしれませんが、皆様のお知恵をお貸ししてほしいと思います。

Re:fscanfでカンマ区切りの文字列を読み出したい

Posted: 2008年10月31日(金) 10:44
by toyo
FileRead_scanf(testMapFileHandle,"%d,%c ",testBuf,testBuf2);

FileRead_scanf(testMapFileHandle,"%d,%c ",&testBuf,&testBuf2);
では

Re:fscanfでカンマ区切りの文字列を読み出したい

Posted: 2008年10月31日(金) 10:56
by toyo
それと%cだと'1'が49になりますがそれで良かったですか。

Re:fscanfでカンマ区切りの文字列を読み出したい

Posted: 2008年10月31日(金) 11:01
by 山崎
toyoさん
ご返信、まことにありがとうございます。

本当に恥ずかしいです、こんな基本的なところでつまずきますとは・・・。
穴があったら入りたいです。
「&」をつけたところ、見事に動きました。

&をつけていろいろ試してはいたのですが、
ほかのバグに引っかかっていたようで「&がないのはバグの原因じゃないのか」と
思い込んでおりました・・・。

Re:fscanfでカンマ区切りの文字列を読み出したい

Posted: 2008年10月31日(金) 11:02
by 山崎
toyoさん

あ、はい 気を遣って頂き本当にありがとうございます。
0~255の値なら何でもいいので、その部分は問題ありません。

Re:fscanfでカンマ区切りの文字列を読み出したい

Posted: 2008年10月31日(金) 11:17
by Justy
 short intに対応するのは %dじゃないですよ。