質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

3608閲覧

敵キャラクターデータ・パラメータをcsvで管理、読み込み

tatoyan

総合スコア12

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/07/04 07:23

敵キャラクターのデータ・パラメータをcsvファイルで管理したいと思っています

id hp atk def 1 50 50 50 2 100 100 100 3 ~~~

のようにIDでその列のキャラクター番号を指定し、その列の数字を与えるということは可能でしょうか。
(上記ではセルがバラバラの状態です)

//指定したファイルを開く

std::ifstream fin("data\data\book1.csv");
//ファイルちゃんと開ければ
if (fin.is_open()){
//ファイル終端まで繰り返す
while(!fin.eof()){
Data d;
fin >> d;
datas.push_back(d);
}
}
fin.close();

現在上記のような形で組んでおります。

また、この方法が無理だということであれば直していきたいと思っています。

//現在確認されているエラー
現在上記のようにcsvファイルを作っているのですが読み込むと、動作が停止するというエラーが出てしまっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PineMatsu

2016/07/05 08:09

コードは```ブロックで囲ってください。見やすくなります。ブラウザ上では</>ボタンを押すと、テンプレが表示されます。 また、Dataクラスのコードがないと恐らく解答が難しいと思います。できれば、追記してください。
guest

回答2

0

こんにちは。

まず、Data型はどんな型でしょうか?
operator>>をオーバーライドしていると思いますが、その内容に問題があるかも知れません。

次に、一行目にid hp atk def という行がありますが、もしそれをint型等の変数に読みだそうとするとエラーになります。そのままいつまでもeof()が成立しないため、無限ループとなりpush_back()しすぎて落ちます。
また、ファイルがANSIではなくUTF-8のBOM付きだった場合も先頭にあるBOMコードのせいで同じ問題が発生します。
これらの場合は、while((fin.get() != '\n') && (!fin.eof())) ;などで先頭行を読み飛ばすとよいと思います。

ところで、そのファイルはcsvファイルではないですよ。

投稿2016/07/04 08:03

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++

1#include <iostream> 2#include <sstream> 3#include <iomanip> 4#include <string> 5#include <vector> 6 7using namespace std; 8 9struct Record { 10 int id, hp, atk, def; 11}; 12 13istream& operator>>(istream& stream, Record& r) { 14 return stream >> r.id >> r.hp >> r.atk >> r.def; 15} 16 17ostream& operator<<(ostream& stream, const Record& r) { 18 return stream << " id:" << setw(4) << r.id << ", " 19 << " hp:" << setw(4) << r.hp << ", " 20 << "atk:" << setw(4) << r.atk << ", " 21 << "def:" << setw(4) << r.def << endl; 22} 23 24int main() { 25 istringstream stream( 26 "id hp atk def\n" 27 "1 50 50 50\n" 28 "2 100 100 100\n" 29 "3 150 150 150\n" 30 ); 31 32 vector<Record> data; 33 34 { // 一行目を空読み 35 string dummy; 36 getline(stream, dummy); 37 } 38 39 Record rec; 40 while ( stream >> rec ) { 41 data.push_back(rec); 42 } 43 44 // 読めたかな? 45 for ( const Record& r : data ) { 46 cout << r; 47 } 48 49}

投稿2016/07/09 23:07

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問