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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
つい集めてしまうものはなんですか?
人間誰もは1つ「やたらこればかり集めてしまう」というものがあるもの。 あなたにとって、つい集めてしまうものはなんですか?
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
【お題】引っかけ問題(締め切り10月27日(日)23時)
【大喜利】 「日本で一番高い山は富士山……ですが!」から始まった、それは当てられるわけ無いだろ!と思ったクイズの問題
-
ちょっと先の未来クイズ第4問
11月ごろに発表される、2024年の「新語・流行語大賞」にノミネートされる言葉を書けるだけ書いてください。
-
高校三年生の合唱祭で何を歌いましたか?
大人になると大人数で合唱する機会ってないですよね。 思い出すと、高校三年生の合唱祭が最後でした。 そこで、みんなの思い出の合唱曲を知りたい!
-
Cで2次元配列にCSVファイルを格納するには?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
エラーがわかりません、、
-
C言語におけるファイル読み込み...
-
fopenでファイル名に、変数を使...
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
fscanfでループしてしまう。
-
C言語にてXMLファイルから任意...
-
テキストファイルをバイナリフ...
-
ファイル出力で改行を入れたい!
-
ファイル入出力について教えて...
-
隣接行列を読み込んで有向グラ...
-
C言語 共用体の構造体の引数設定
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
「指定されたキャストは有効で...
-
エクセルで可視セルにのみ値貼...
-
プログラミング初心者です。 Py...
-
複数桁10進数の*桁目だけを抽出...
-
10個出力で改行したいのですが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
c言語でのfscanfについて
-
ガンマ変換 C言語でプログラ...
-
fopenでファイル名に、変数を使...
-
エラーがわかりません、、
-
C言語でクロマキー合成をする方法
-
ファイル出力で改行を入れたい!
-
C言語でファイル読み書きを早く...
-
テキストファイル内に対して, ...
-
ファイルが読み込めない・・・
-
ファイルへの書込み処理が異常...
-
fscanfでループしてしまう。
-
音声データを出力するCプログラ...
-
fgets関数の利用 c言語
-
fgets( ) の返り値は何?
-
日本語ファイル名のFTPについて
-
大量の入力ファイルを扱うとき...
-
【C言語】ファイルを読み込んで...
-
二分探索木への挿入
-
C言語でセグメンテーションエ...
おすすめ情報