設定データを途中から読み込みたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
史上最悪のデスペナ
記事: 521
登録日時: 9年前

設定データを途中から読み込みたい

#1

投稿記事 by 史上最悪のデスペナ » 8年前

例えばこんなNPC設定用データがあったとします。本来はバイナリデータとして保存するつもりです

コード:

1    134    史上最悪のデスペナ               135.0f    0.0f    43.5f
     134    途中から読                         0.0f   13.4f     2.2f
     167    qazwsxed                           3.5f    2.1f     4.2f
2    115    くぁwせdrftgyふじこlp    22.1f    9.9f    66.6f
これを、読み込みたいのですが自キャラの構造体中に
int Type;
int Number;
というものがあるとき、
(Type = 1) && (Number = 134)のとき「史上最悪のデスペナ」と「途中から読」が、
(Type = 1) && (Number = 167)のとき「qazwsxed」が、
(Type = 2) && (Number = 115)のとき「くぁwせdrftgyふじこlp」が読み込まれるようにしたいのですがどうしたらいいでしょうか?

最初は別に作成した変数にいっぺんに全部読み込んじゃってそこから該当するのを目的とする変数にコピーしようかと思ったのですが
もっといい方法を教えてください。
最後に編集したユーザー 史上最悪のデスペナ on 2011年12月07日(水) 08:42 [ 編集 5 回目 ]

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

Re: セーブデータを途中から読み込みたい

#2

投稿記事 by beatle » 8年前

テキストファイルだと1行のバイト数が変わりますからね。先頭から読んで行くしかないのではないでしょうか。
バイナリデータで1行分のバイト数が固定されているんだったら、そのバイト数だけどんどんずらしながら検索もできるでしょうけど。

テキストファイルでも、メモリマップドファイルという技術を使えばやりたいことができるかもしれません。

史上最悪のデスペナ
記事: 521
登録日時: 9年前

Re: セーブデータを途中から読み込みたい

#3

投稿記事 by 史上最悪のデスペナ » 8年前

beatle さんが書きました:バイナリデータで1行分のバイト数が固定されているんだったら、そのバイト数だけどんどんずらしながら検索もできるでしょうけど。
データの中身の通り、長さの違う文字列が入ってるのでバイト数だけどんどんずらしながら検索が出来ないのではと思ったのですが出来ますか?

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

Re: セーブデータを途中から読み込みたい

#4

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

チャンク構造と言うデータ構造を取るのがひとつの方法です。
あるいは、文字列を一箇所に固めてファイルの相対位置データとして持つ方法もあります。
ところで、文字列をセーブデータ中に入れるのはあまりよろしくないですが、どうしても文字列で書きだす必要のあるデータですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 9年前

Re: セーブデータを途中から読み込みたい

#5

投稿記事 by 史上最悪のデスペナ » 8年前

softya(ソフト屋) さんが書きました:ところで、文字列をセーブデータ中に入れるのはあまりよろしくないですが、どうしても文字列で書きだす必要のあるデータですか?
NPCの位置と名前含む属性をデータ化して
キャラ位置に応じて必要なNPCデータを読み込みたいと思ったのです。

チャンク構造はちょっと調べてみます

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

Re: セーブデータを途中から読み込みたい

#6

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

>NPCの位置と名前含む属性をデータ化してキャラ位置に応じて必要なNPCデータを読み込みたいと思ったのです。

名前とか厄介なデータはプログラム中のテーブル(構造体配列)にあるのでは?
だとしたらセーブデータに保存しておくべきなのはテーブルのインデックス番号と座標など数値データだけで良いのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
パコネコ
記事: 139
登録日時: 9年前
住所: 大阪

Re: セーブデータを途中から読み込みたい

#7

投稿記事 by パコネコ » 8年前

特定の行数をロードする関数でも作成したらいい気もします。
(結局よみこむっちゃ読み込みますが...)
'¥n'とかが出るまでループ的なやつで、
全部読み込むよりはましだとは思いましたが...駄目ですか?
ニャン!!\(゜ロ\)(/ロ゜)/

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

Re: セーブデータを途中から読み込みたい

#8

投稿記事 by non » 8年前

どれくらいのデータ量なのでしょうか?全部読んでも、たいしたことないのでは?
non

ISLe
記事: 2646
登録日時: 9年前
連絡を取る:

Re: セーブデータを途中から読み込みたい

#9

投稿記事 by ISLe » 8年前

セーブデータじゃなくて、NPCをマップに配置するための設定データなのでは?
部分的に更新するのたいへんでしょ。

naohiro19
記事: 256
登録日時: 9年前
住所: 愛知県

Re: セーブデータを途中から読み込みたい

#10

投稿記事 by naohiro19 » 8年前

boost::serializationを使う方法があります(参照)。

史上最悪のデスペナ
記事: 521
登録日時: 9年前

Re: 設定データを途中から読み込みたい

#11

投稿記事 by 史上最悪のデスペナ » 8年前

パコネコ さんが書きました:特定の行数をロードする関数でも作成したらいい気もします。
(結局よみこむっちゃ読み込みますが...)
'¥n'とかが出るまでループ的なやつで
バイナリデータなので¥nって存在しないと思ったのですが・・・・・・
non さんが書きました:どれくらいのデータ量なのでしょうか?全部読んでも、たいしたことないのでは?
推定最低量は100ステージ*3箇所*5人分、つまり1500人分のデータですね。それのステージ値、箇所識別番号、名前、3次元座標、その他(←まだ未定)
となる予定です。
ISLe さんが書きました:セーブデータじゃなくて、NPCをマップに配置するための設定データなのでは?
確かにそうですね。本文中では全部データとちゃんと述べてますが良く見たらトピック名が「セーブデータ」でした・・・・orz
設定データの間違いです。

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

Re: 設定データを途中から読み込みたい

#12

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

実際に1500人分もメンテ出来るかどうかは別として、1500x256バイトとしても375kB程度です。全部読み込めるのでは?
あとメンテナンス性を考えて設定データはexcel(openofficeでも可)出力のcsvなどテキストファイルで作られたほうが良いでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: 設定データを途中から読み込みたい

#13

投稿記事 by non » 8年前

後で、バイナリにするのなら、最初からバイナリで作りましょうよ。
バイナリなら、各レコードを固定長フィールドにした方がアクセスが簡単です。
non

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

Re: 設定データを途中から読み込みたい

#14

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

non さんが書きました:後で、バイナリにするのなら、最初からバイナリで作りましょうよ。
バイナリなら、各レコードを固定長フィールドにした方がアクセスが簡単です。
バイナリの変換の手間が最終的にバランス調整時に手間や変換漏れなどにつながるので極力避けたほうが良いと思います。
Excel→csv→ゲームプログラム
としておいたほうがメンテナンス性が高いです。

どうしてもバイナリにしたいなら、[固定長部分] [可変長部分(文字列)] とファイルを2つの構造に分けたほうが良いでしょう。固定長部分から可変長部分(文字列)は、ファイル内相対位置でアクセスできるようにします。この場合はExcelから直接バイナリ出力をするVBAマクロを組んだほうが良いでしょうね。
Excel(VBA)→設定バイナリファイル→ゲームプログラム
となります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
パコネコ
記事: 139
登録日時: 9年前
住所: 大阪

Re: 設定データを途中から読み込みたい

#15

投稿記事 by パコネコ » 8年前

>バイナリデータなので¥nって存在しないと思ったのですが・・・・・・
あーそういえばそうですね...読み込み時にバイナリとして読み込むだけだと思ったので、¥nのこってると思ったのですが、勘違いだったようですね。
(バイナリで最後にデータいじったのっていつだっけ?ってぐらい忘れているので、多分関係ない事言ってるかもです...)
すいませんでした。
ニャン!!\(゜ロ\)(/ロ゜)/

史上最悪のデスペナ
記事: 521
登録日時: 9年前

Re: 設定データを途中から読み込みたい

#16

投稿記事 by 史上最悪のデスペナ » 8年前

softya(ソフト屋) さんが書きました:Excel→csv→ゲームプログラム
としておいたほうがメンテナンス性が高いです。
分かりました。それで、いっぺんに読み込んじゃうんですね?
みなさんありがとうございました

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

Re: 設定データを途中から読み込みたい

#17

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

史上最悪のデスペナ さんが書きました:
softya(ソフト屋) さんが書きました:Excel→csv→ゲームプログラム
としておいたほうがメンテナンス性が高いです。
分かりました。それで、いっぺんに読み込んじゃうんですね?
みなさんありがとうございました
そういう結論で良いのでしょうか?
あとで思いつきましたが、イベントやNPCや宝箱などなどのデータをまとめて設定するマップツールが必要な気がします。
名前やパラメータはなどはcsv入力で良いでしょうが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2646
登録日時: 9年前
連絡を取る:

Re: 設定データを途中から読み込みたい

#18

投稿記事 by ISLe » 8年前

わたしは
csv→バイナリ→ゲームプログラム
という作り方しますけど。
たいていPerlスクリプトでバイナリに変換します。

データ型とバイト長を列挙した設定ファイルといっしょに食わせて変換するような汎用ツールを作っておくとあとあと楽ができるかもしれません。

閉鎖

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