excelのCSVファイルを上手く読めない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
namari
記事: 111
登録日時: 13年前

excelのCSVファイルを上手く読めない

#1

投稿記事 by namari » 13年前

マップに当たり判定があるかどうかを0か1で表して、

コード:

MapData[0][30][40]={
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,//16ドット
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,//80ドット

0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,

0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,

0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,

0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,

0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
}
のように表しています。(MapData[マップ番号][縦の長さ][横の長さ])
一々、こういう行列を作るのも面倒くさいので、excelから読み込めるようにしたいと思い、
excelに0,0,0,0,0,…のようなCSVファイルを作り、
下のようにしましたが、上手くいきません。

コード:

void load_map(){
    int i;int j;
	FILE *FileHandle[100];
	FileHandle[0]=fopen( "dat/map/map0.csv" ,"r");
        if(FileHandle[0] == NULL){
                printfDx("read error\n");
		}
	for(i=0;i<=29 ;i++){
			for(j=0;j<=39;j++){
				MapData[0][i][j]=fgetc(FileHandle[0]);//0か1かを覚えさせる。
				fgetc(FileHandle[0]);//0,1,1,0・・・と一定の順番なので、「,」を出して、ファイル位置指示子を進める。
				printfDx("%d",MapData[0][i][j]);//処理がどうなっているか見る試験的なもので、上手く行ったら消す。
			}
	}
    fclose(FileHandle[0]);
}
このように表現したのですが、

コード:

printfDx("%d",MapData[0][i][j]);
に従って、画面いっぱいに-1が表示されます。
-1ということは、fgetcにエラーが起きて、返り値に-1がでているのでしょうが、
理由が分かりません。
どういうコーディングをすればいいのでしょうか?

non
記事: 1097
登録日時: 15年前

Re: excelのCSVファイルを上手く読めない

#2

投稿記事 by non » 13年前

プログラム全部を載せてもらえますか?

FILE *FileHandle[100];
100個も必要な理由は?

MapData[0][30][40]={
この宣言は?
non

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: excelのCSVファイルを上手く読めない

#3

投稿記事 by softya(ソフト屋) » 13年前

問題はありますが、つぎの様な結果になるはずです。

プログラム。改行処理が出来ていないので正しくはありません。

コード:

#include "stdio.h"

int MapData[1][30][40];

void load_map() {
	int i;
	int j;
	FILE *FileHandle[100];
	FileHandle[0] = fopen( "map0.csv" , "r" );
	if( FileHandle[0] == NULL ) {
		printf( "read error\n" );
	}
	for( i = 0; i <= 29 ; i++ ) {
		for( j = 0; j <= 39; j++ ) {
			MapData[0][i][j] = fgetc( FileHandle[0] ); //0か1かを覚えさせる。
			fgetc( FileHandle[0] ); //0,1,1,0・・・と一定の順番なので、「,」を出して、ファイル位置指示子を進める。
			printf( "%02x,", MapData[0][i][j] ); //処理がどうなっているか見る試験的なもので、上手く行ったら消す。
		}
		printf( "\n" );
	}
	fclose( FileHandle[0] );
}

int main()
{
	load_map();
}
入力

コード:

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
出力。16進で表示。

コード:

30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,0a,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,2c,
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
namari
記事: 111
登録日時: 13年前

Re: excelのCSVファイルを上手く読めない

#4

投稿記事 by namari » 13年前

>>プログラム全部を載せてもらえますか?

コード:

//load.cpp
#include "../include/GV.h"

void load(){
//画像の読み込み。
}

void load_map(){
    int i;int j;
    FILE *FileHandle[100];
    FileHandle[0]=fopen( "dat/map/map0.csv" ,"r");
        if(FileHandle[0] == NULL){
                printfDx("read error\n");
        }
    for(i=0;i<=29 ;i++){
            for(j=0;j<=39;j++){
                MapData[0][i][j]=fgetc(FileHandle[0]);//0か1かを覚えさせる。
                fgetc(FileHandle[0]);//0,1,1,0・・・と一定の順番なので、「,」を出して、ファイル位置指示子を進める。
                printfDx("%02x,",MapData[0][i][j]);//処理がどうなっているか見る試験的なもので、上手く行ったら消す。
            }
			printf( "\n" );
    }
    fclose(FileHandle[0]);
}

void load_main(){
	load();
	load_map();
}

//GV.h
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern 
#endif

GLOBAL int MapData[100][30][40];//MapData[マップ番号][縦の数][横の数]

map0.csvの中身は、以下です(本当はコンマではなく、セルで区切られていますが)

コード:

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>FILE *FileHandle[100];
>100個も必要な理由は?
今回は一個でいいんですが、この先にマップを複数作るときのためです。

>MapData[0][30][40]={
>この宣言は?
excelで読み込ませる前のMapDataの初期化の仕方です。
excelで読み込ませる今回の場合は、使ってないです。

>softya(ソフト屋)
実行したら、

コード:

ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
のように表示されました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: excelのCSVファイルを上手く読めない

#5

投稿記事 by softya(ソフト屋) » 13年前

csvファイルはカンマで区切られていて正しいです。
Excelが読み込む時ににセルに分けているだけです。逆に出力時はセルを,で区切りテキストとして出力します。

openエラーで止まるようにしてみましたがエラーに成っていませんか?
openエラーに成らないとしたら、csvファイルが怪しいのでzipして添付してみて下さい。

コード:

#include "stdio.h"

int MapData[1][30][40];

void load_map() {
	int i;
	int j;
	FILE *FileHandle[100];
	FileHandle[0] = fopen( "map0.csv" , "r" );
	if( FileHandle[0] == NULL ) {
		printf( "open error\n" );
		exit(1);
	}
	for( i = 0; i <= 29 ; i++ ) {
		for( j = 0; j <= 39; j++ ) {
			MapData[0][i][j] = fgetc( FileHandle[0] ); //0か1かを覚えさせる。
			fgetc( FileHandle[0] ); //0,1,1,0・・・と一定の順番なので、「,」を出して、ファイル位置指示子を進める。
			printf( "%02x,", MapData[0][i][j] ); //処理がどうなっているか見る試験的なもので、上手く行ったら消す。
		}
		printf( "\n" );
	}
	fclose( FileHandle[0] );
}

int main()
{
	load_map();
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
namari
記事: 111
登録日時: 13年前

Re: excelのCSVファイルを上手く読めない

#6

投稿記事 by namari » 13年前

>>softya(ソフト屋)さん
exit(1);を加えても、止まりませんでした。

http://www1.axfc.net/uploader/so/2800414
map0.csvをアップロードしました。


あと、

コード:

fgetc( FileHandle[0] ); //0,1,1,0・・・と一定の順番なので、「,」を出して、ファイル位置指示子を進める。
の処理に問題って無いですか?
fgetcは整数以外の「,」も受けられるんでしょうか。
それに他のファイル位置指示子の進め方は無いんでしょうか

アバター
namari
記事: 111
登録日時: 13年前

Re: excelのCSVファイルを上手く読めない

#7

投稿記事 by namari » 13年前

すみません。
さきほど、printfDx("%02x,",MapData[0][j]);を加えたあとの処理に

コード:

ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
と書きましたが、

コード:

30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
の勘違いでした。
いえ、正しくは、保存時の問題でcsvの中身が空でした。すみません。
もしかして、これは求めている値の+30の値になっているのでしょうか・・・
型の問題などでしょうか・・・?

アバター
namari
記事: 111
登録日時: 13年前

Re: excelのCSVファイルを上手く読めない

#8

投稿記事 by namari » 13年前

すみません。
さきほど、printfDx("%02x,",MapData[0][j]);を加えたあとの処理に

コード:

ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,
と書きましたが、

コード:

30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
の勘違いでした。
いえ、正しくは、保存時の問題でcsvの中身が空でした。すみません。
もしかして、これは求めている値の+30の値になっているのでしょうか・・・
型の問題などでしょうか・・・?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: excelのCSVファイルを上手く読めない

#9

投稿記事 by softya(ソフト屋) » 13年前

fgetc()は文字コードをファイルから1バイト得る関数です。
int fgetc(
FILE *stream
);
定義も戻り値がintですが文字コードが返ります。 数値なら0x30から0x39までの値で,は0x2Cです。
なので、"0"なら0x30で正解です。
「C言語-文字列処理(文字コード)」
http://masudahp.web.fc2.com/cl/strpnt/c1010.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
namari
記事: 111
登録日時: 13年前

Re: excelのCSVファイルを上手く読めない

#10

投稿記事 by namari » 13年前

>>softya(ソフト屋)さん
定義も戻り値がintですが文字コードが返ります。 数値なら0x30から0x39までの値で,は0x2Cです。
なので、"0"なら0x30で正解です。
「C言語-文字列処理(文字コード)」
http://masudahp.web.fc2.com/cl/strpnt/c1010.html[/quote]

30,30,・・・は0を表しているということなのですか・・・?


ここで、十進法表記で48,48,48,…49,49,49,
と表記されたので、

コード:

MapData[0][i][j] = fgetc( FileHandle[0] )-48;
と処理してやったところ完璧に動作してしまいました。
もしかして文字としての「0」と数字の0は違うものという理解でいいんでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: excelのCSVファイルを上手く読めない

#11

投稿記事 by softya(ソフト屋) » 13年前

>もしかして文字としての「0」と数字の0は違うものという理解でいいんでしょうか。
はい違います。

文字'0'は文字コードの数値で表すと10進数だと48で16進数だと0x30です。
つまり、文字コードの場合と単なる数値とは違うものであると言うことです。
ちなみにこう書いて下さい。 fgetc( FileHandle[0] )-'0'; あとあと分かりやすいです。

さらにcsvで数値を2桁以上にするともっと面倒なことになりますので気をつけて下さい。

こういうのは現状では処理出来ません。
0,0,0,0,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
namari
記事: 111
登録日時: 13年前

Re: excelのCSVファイルを上手く読めない

#12

投稿記事 by namari » 13年前

nonさん、softya(ソフト屋)さんありがとうございました。
charで得られる数字の文字コードの数値と、int型の数字に、ずれがあったので、
それを考慮しなければならなかったんですね。
そして、fgetcは文字コードを数字で得る関数だったことに認識のおかしさがあったようです。

また、数字二桁はおそらく扱うことがないので、問題とはならなそうです。
細かいところまでありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る