トップページ > 記事閲覧
csvファイルの読み込みについて
名前:はっぴー 日時: 2023/09/28 14:42

お世話になっております。 私は現在2Dのアクションゲームを作っているのですが、ステージ作成のためFileRead_scanfを使ってcsvファイルを読み込んで配列に格納する処理が上手くいきません。 配列の先頭データは正しく格納されているのですがそれ以外の値は-842150451(int)になってしまいます。 ファイルの設定や関数の使い方などに間違いがありましたら、ご教授頂けると幸いです。 Map.h(一部抜粋) #include <vector> #include "DxLib.h" #include "define.h" #include "stdio.h" #include "math.h" #include "stdlib.h" class Map { private: // 画面内に表示されているマップのデータ // 動的配列でメモリを確保 int *mapData = new int[MAP_SIZE_X * MAP_SIZE_Y]; } Map.cpp(一部抜粋) // LoadMapDataはコンストラクタで実行しています void Map::LoadMapData() { // ファイルを開く fh_MapData = FileRead_open("sprite/Map/MapData.csv"); // ファイルからマップデータを読み込む for (int i = 0; i < MAP_SIZE_X * MAP_SIZE_Y; i++) { // 書式制御文字列を読み込む if (FileRead_scanf(fh_MapData, "%d", mapData + i) != -1) { break; } } // 読み込んだファイルを閉じる FileRead_close(fh_MapData); return; }
メンテ

Page: 1 |

Re: csvファイルの読み込みについて ( No.1 )
名前:管理人 日時:2023/09/29 01:45

載せていただいたプログラムを拝見する限りでは if (FileRead_scanf(fh_MapData, "%d", mapData + i) != -1) ↑ こちらの行の != -1 の部分が == -1 なのではないかと思います != -1 の場合は、FileRead_scanf の戻り値がエラー( -1 )ではない場合に真となってしまって if文の中に入り break; でループを抜けてしまうので、1ループ目でエラーが発生しなければループを抜けてしまい 結果として先頭のデータだけ正常に読み込まれ、残りのデータは読み込まれない( 読み込みループを break で抜けてしまうので )、ということになります よろしければ != を == に変更して実行してみてください m(_ _)m
メンテ
Re: csvファイルの読み込みについて ( No.2 )
名前:はっぴー 日時:2023/09/29 11:18

早速のご返答ありがとうございます。 確認した所、ループを抜けてしまっていました。 しかし、ご指摘いただいた部分を修正してデバッグしてもファイルの中身は変わらず先頭データ以外は読み込めていませんでした。 なにかcsvファイルの中身や文字コードなどに問題があるのでしょうか?
メンテ
Re: csvファイルの読み込みについて ( No.3 )
名前:管理人 日時:2023/09/29 13:02

> なにかcsvファイルの中身や文字コードなどに問題があるのでしょうか? その可能性はあるかもしれません よろしければ読み込みに使用されている MapData.csv をzip圧縮した上でこちらのメールアドレス BQE00322(あっとまーく)nifty.com ( (あっとまーく) を @ に置き換えてください ) に送って頂けないでしょうか? ファイルを拝見できれば原因がわかると思いますので m(_ _)m
メンテ
Re: csvファイルの読み込みについて ( No.4 )
名前:管理人 日時:2023/09/30 02:45

メールありがとうございます 送って頂いた csvファイルは各数値が , で区切られていますので if (FileRead_scanf(fh_MapData, "%d", mapData + i) == -1) ↑ こちらの行の "%d" の部分に , を追加して "%d," としていただくことで 正常に読み込むことができます よろしければお試しください m(_ _)m
メンテ
Re: csvファイルの読み込みについて ( No.5 )
名前:はっぴー(解決済み) 日時:2023/10/02 09:31

返信遅くなり申し訳ありません。 無事に読み込みが出来るようになりました !(^v^)! お忙しい中ご丁寧に対応いただき誠にありがとうございました!!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存