
CSVファイルを2次元配列に格納したいのですが、書き方がわかりません。
csvファイルは1024×2048の0と1のみで構成されています。
fp=fopen(path,"r");
for(j=0; j<1024; j++)
{
for(i=0; i<2048; i++)
{
char c;
do{c=(getc(fp));}
while(c==','||c=='\n'||c=='\r');
map[j][i] = c-'0';
}
}
このように書きできたと思ったのですが、どうもうまくいっていないみたいです。
どこが悪いのか、どういう風に書けばいいのか教えていただげれば幸いです。
A 回答 (14件中1~10件)
- 最新から表示
- 回答順に表示
No.14
- 回答日時:
自分で読み直していて、またも気になりまして。
>1024×2048の0と1のみ
X=1024
Y=2048
ですよね?
for(j=0; j<1024; j++) // y
for(i=0; i<2048; i++) // x
もしかして逆ではない?
(これが最終的に解答だったりして?)
ということで、前回のソースを修正しておきます。
バッファーが足りなかったもので。
char buffer[2048+2]; // fgetsは改行コードも読むので、少し予備を追加しておく
ここだけですが。
No.13
- 回答日時:
>0,1の2パターンだと解釈しました。
これは
>csvファイルは1024×2048の0と1のみで構成されています。
ここからきてるんですね。
だとしてもgetc()の戻り値が0,1の2パターンだけという事はありませんけど(0,1と書くにしても'0','1'が妥当)。
No.12
- 回答日時:
??
if( map[(int)gPos.y][(int)gPos.x] == 1)
{
gPos.x-=1;
}
自分の位置を調べてもダメですよ^^
もしや・・・
padという構造体があったとして、
キーが押されたときに、
up,down,left,rightが0以外が入ると仮定します。
if (pad.up) {
if (map[gPos.y-1][gPos.x]) gPos.y--;
}
if (pad.down) {
if (map[gPos.y+1][gPos.x]) gPos.y++;
}
if (pad.left) {
if (map[gPos.y][gPos.x-1]) gPos.x--;
}
if (pad.right) {
if (map[gPos.y][gPos.x+1]) gPos.x++;
}
です。
要するに今から以降としている位置が「いけるか?」をチェックしてOKなら
位置変数を加算減算すればOKですよ。
で、今現在がXが0だったら、
gPos.x-1 これはまずいので、
if (gPos.x>0 && map[gPos.y][gPos.x-1]) gPos.x--;
と言う感じで、0の時は、既にNGとして処理すればOK
if (gPos.x<2047 && map[gPos.y][gPos.x+1]) gPos.x++;
#define MIN_X 0
#define MAX_X 2047
などと、デファインか何かで、移動可能なエリアを制限しておくと、
マップが大きくなったときなど、面倒なバグは減らせると思います。
No.11
- 回答日時:
これってなんとなく、「マップファイル」ですよね?
「MapFile.dat」
0000000000
0001111000
0001111000
0001111000
0000000000
みたいに、CSVじゃなくて、まともに、それだけを入れたほうが、読みやすい気がします。
元のファイルの時点でも。
そうすれば、fgets < 1ライン読み込みを、2048回やるだけですから。
で、1024のX軸も、ダイレクトに計算できて楽な気がしますよ。
ついでに、"0"の文字コードは0x30,"1"は0x31なので、
char buffer[1024+2]; // fgetsは改行コードも読むので、少し予備を追加しておく
fp=fopen(path,"r");
for(j=0; j<1024; j++) {
fgets(buffer,sizeof(buffer),fp);
for(i=0; i<2048; i++) {
map[j][i] = buffer[i]&1; // 文字コードの最後の1ビットを値にする
}
}
fclose(fp);
こんだけじゃだめ?
EOFチェックなどがないので、1024行に満たない場合や、
2048個データが無いなどはチェックしてません。
後本当に、0と1以外しかいれないのであれば、
まともに代入してしまって、判定の時01でチェックしたってOKです。
情報量は、どちらも同じ8ビットでしかないので。
http://e-words.jp/p/r-ascii.html
文字コードはこちらを参考に。
No.10
- 回答日時:
>0,1の2パターンだと解釈しました。
もしかして私が#8で書いた
>(0を返すときもあるし、1を返すときもあるし、それが何パターンありますか)
を数えたとかいう話?
getc()が0と1のどちらかしか返さないのなら
charの変数cに代入しても0と1のどちらかしか代入されませんが
>while(c==','||c=='\n'||c=='\r');
何で3パターンの比較してるの?
',','\n','\r'はどれも、0でも1でもないですよ?
マニュアル読みかえしてgetc()について調べてくださいな。
No.5
- 回答日時:
質問文と補足内の
>if( map[(int)gPos.y][(int)gPos.x] == 1)
を見ると
gPos.y の値として 0~1023
gPos.x の値として 0~2047
を期待してるように見えますがそれで合ってるんですか?
多次元配列でうまく動かないとかうまく格納されないってのは
その対応間違えてるぐらいしかないと思いますけど
(もしくは元のデータ(書式)が間違ってる)
読み込んだつもりのデータを再度自分でCSVに落として
元のファイルと比較すれば
読み込み処理が間違ってるのか
判断処理が間違ってるのか
どっちが悪いかの判断はつくでしょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でファイル読み書きを早く...
-
初心者のc言語
-
ファイルに行番号を追加
-
CSVファイルを読み込み構造体の...
-
c言語でのfscanfについて
-
C言語でのCSVソートとデータ抽...
-
テキストファイル内に対して, ...
-
OpenGLによる描画内容をBMP出力
-
fopenでファイル名に、変数を使...
-
fgets( ) の返り値は何?
-
日本語ファイル名のFTPについて
-
CRC32の計算方法
-
ファイルのデータを構造体に入...
-
a*(1-exp(-bx))+cの近似の方法
-
ファイルからCR/LFを除去したい
-
大量の入力ファイルを扱うとき...
-
Enterキーを押されたら次の処理...
-
「Aに対するBの割合」と「Aに対...
-
C言語での引数の省略方法
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
ファイル出力で改行を入れたい!
-
fscanfでループしてしまう。
-
C言語にてXMLファイルから任意...
-
テキストファイル内に対して, ...
-
datファイルの読み込み
-
ファイルに行番号を追加
-
大量の入力ファイルを扱うとき...
-
辞書順にソートしたいのですが...
-
InternetReadFileを使ったファ...
-
C言語 連番データの読み込み
-
C言語におけるファイル読み込み...
-
数値のみ抽出(C言語)
-
簡易grep関数ができません。助...
-
VisualStudioでのファイルの入...
-
fgets( ) の返り値は何?
おすすめ情報