CSV読み込みの手法
Posted: 2012年9月18日(火) 21:36
龍神プログラミングの館11章を参考にCSVファイルを参照して敵のパラメータをセットする関数を
作成しました。引数に敵のパラメータ構造体と敵のindex番号を指定すると対象の敵パラメータが読み込めれる関数を作成しようと思ったのですが、構造体のメンバをunsigned char にするパラメータによってはとゴミが入ります。とれるところはとれていおります。
(unsigned char)でキャストしても上手くいかず、メンバをint型にすると改善されます。
何が原因でしょうか?ご教示お願い致します。
以下がコードとなります。※「★」箇所になります。
作成しました。引数に敵のパラメータ構造体と敵のindex番号を指定すると対象の敵パラメータが読み込めれる関数を作成しようと思ったのですが、構造体のメンバをunsigned char にするパラメータによってはとゴミが入ります。とれるところはとれていおります。
(unsigned char)でキャストしても上手くいかず、メンバをint型にすると改善されます。
何が原因でしょうか?ご教示お願い致します。
以下がコードとなります。※「★」箇所になります。
void Load_Enemy_Param(Enemy_Param *enemy_order, int number)
{
int fp, i;
int n = 0;
int num = 0;
char* fname = "enemy/EnemyTable.csv";
int input[256]={0,};
char inputc[256] ={0,} ;
fp = FileRead_open("enemy/EnemyTable.csv");//ファイル読み込み
if(fp == NULL){
printfDx("read error\n");
return;
}
//出力対象の計算
n = number + 1;
for(i = 0; i < n; i++){//最初から対象行まで読み飛ばす
while(FileRead_getc(fp)!='\n');
}
while(1){
for(i=0;i<1024;i++){
inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
if(input[i]==',' ){//カンマ
inputc[i]='\0';//そこまでを文字列とし
break;
}
if(input[i]=='\n'){//改行ならなら
goto EXFILE;//終了
}
}
switch(num){
//★以下が質問箇所
case 0: enemy_order->no =atoi(inputc);break;
case 1: enemy_order->name =inputc; break;
case 2: enemy_order->level =atoi(inputc);break;
case 3: enemy_order->hp =atoi(inputc);break;
case 4: enemy_order->mp =atoi(inputc);break;
case 5: enemy_order->pw =atoi(inputc);break;
case 6: enemy_order->dif =atoi(inputc);break;
case 7: enemy_order->sp =atoi(inputc);break;
case 8: enemy_order->mag =atoi(inputc);break;
case 9: enemy_order->soul =atoi(inputc);break;
case 10:enemy_order->eva =atoi(inputc);break;
case 11:enemy_order->mag_eva =atoi(inputc);break;
case 12:enemy_order->money =atoi(inputc);break;
case 13:enemy_order->exp =atoi(inputc);break;
case 14:enemy_order->com1 =atoi(inputc);break;
case 15:enemy_order->com2 =atoi(inputc);break;
case 16:enemy_order->com3 =atoi(inputc);break;
case 17:enemy_order->com4 =atoi(inputc);break;
case 18:enemy_order->com5 =atoi(inputc);break;
case 19:enemy_order->raitem =atoi(inputc);break;
case 20:enemy_order->item =atoi(inputc);break;
case 21:enemy_order->stea_raitem=atoi(inputc);break;
case 22:enemy_order->stea_item =atoi(inputc);break;
}
num++;
}
EXFILE:
FileRead_close(fp);
}
//******************************************************************************
typedef struct{
//★ intならゴミ入らず
unsigned char no;
char* name;
unsigned char level;
unsigned char hp;
unsigned char mp;
unsigned char pw;
unsigned char dif;
unsigned char sp;
unsigned char mag;
unsigned char soul;
unsigned char eva;
unsigned char mag_eva;
unsigned int money;
unsigned int exp;
unsigned char com1;
unsigned char com2;
unsigned char com3;
unsigned char com4;
unsigned char com5;
unsigned char raitem;
unsigned char item;
unsigned char stea_raitem;
unsigned char stea_item;
}Enemy_Param;