CSVファイルの読み込みについて
Posted: 2010年11月05日(金) 18:49
申し訳ありませんが、また質問させて頂きます。
現在、C++とDXライブラリを使ってタイピングクイズゲームを作っています。
以下のページを参考に、問題と解答をエクセルファイルで管理してデータを読み込ませる手法を行っています。
ttp://dixq.net/rp/11.html
1.CSVファイルから「問題」と「解答」のデータを読み込み、各配列に格納。
2.「問題」を出題。
3.KeyInputStringを用いて答えさせる。
4.「入力された答え」と「解答」が同じなら正解判定、異なるなら不正解判定。
この様な流れで組んでいます。
しかし、(前回質問したのとは違う理由でまたもや)正解でも正解判定になりません。
そこで、問題・解答・入力された答えの中身を1バイトずつ拾ってみたところ、以下の様になりました。
問題: [文字列],0
解答: [文字列],13,0
入力: [文字列],0
判り難いと思いますが、解答にあたる文字配列にのみヌル文字「0」の前に「13」というコードが紛れ込んでいました。
そこで、解答を読み込む場合のみヌル文字を格納する配列を1つずらしてみたら解決できました。
調べてみたところ、「13」は「行頭復帰」を表すそうですが、何故これが入るのか判りません。
何故行頭復帰が入るのか、そして行頭復帰を根本から読み込ませない方法を教えてもらえたら幸いです。
以下、問題読み込みにあたるコードになります。
(上記の「解答を読み込む場合のみ、ヌル文字を格納する配列を1つずらす」処理を行っていないものです。)
また、csvファイルの中身は以下のような構造になっています。
以上、宜しくお願い致します。
現在、C++とDXライブラリを使ってタイピングクイズゲームを作っています。
以下のページを参考に、問題と解答をエクセルファイルで管理してデータを読み込ませる手法を行っています。
ttp://dixq.net/rp/11.html
1.CSVファイルから「問題」と「解答」のデータを読み込み、各配列に格納。
2.「問題」を出題。
3.KeyInputStringを用いて答えさせる。
4.「入力された答え」と「解答」が同じなら正解判定、異なるなら不正解判定。
この様な流れで組んでいます。
しかし、(前回質問したのとは違う理由でまたもや)正解でも正解判定になりません。
そこで、問題・解答・入力された答えの中身を1バイトずつ拾ってみたところ、以下の様になりました。
問題: [文字列],0
解答: [文字列],13,0
入力: [文字列],0
判り難いと思いますが、解答にあたる文字配列にのみヌル文字「0」の前に「13」というコードが紛れ込んでいました。
そこで、解答を読み込む場合のみヌル文字を格納する配列を1つずらしてみたら解決できました。
調べてみたところ、「13」は「行頭復帰」を表すそうですが、何故これが入るのか判りません。
何故行頭復帰が入るのか、そして行頭復帰を根本から読み込ませない方法を教えてもらえたら幸いです。
以下、問題読み込みにあたるコードになります。
(上記の「解答を読み込む場合のみ、ヌル文字を格納する配列を1つずらす」処理を行っていないものです。)
/*********************************** 問題配列 ***********************************/ char mondaiQ[100][32]; char mondaiA[100][32]; /*********************************** 問題読込 ***********************************/ int n,num; int input[32]; char inputc[32]; int fp = FileRead_open("ファイル名");//ファイル読み込み n=0,num=0; while(1){ for(int i=0;i<32;i++){ inputc=input=FileRead_getc(fp);//1文字取得する if(input=='/'){//スラッシュなら while(FileRead_getc(fp)!='\n');//改行までループ i=-1;//カウンタを最初に戻す continue; } if(input==','||input=='\n'){//カンマか改行なら inputc='\0';//そこまでを文字列とする break; } if(input==EOF){//ファイルの終わりなら goto EXFILE; } } switch(num){ case 0: strcpy(mondaiQ[n],inputc);break; case 1: strcpy(mondaiA[n],inputc);break; } num++; if(num==2){ num=0; n++; } } EXFILE: FileRead_close(fp);
また、csvファイルの中身は以下のような構造になっています。
/問題,解答 もんだい1,かいとう1 もんだい2,かいとう2 もんだい3,かいとう3 ・ ・ ・ (以下、100問まで同じ)
以上、宜しくお願い致します。
