私はテキスト ベースのゲームを作成しており、ユーザーが保存できるようにしたいと考えています。保存すると、すべての変数がテキスト ファイルに保存されます。
それらをファイルから取り出して、特定の変数とポインターに割り当てる方法がわかりません。
ファイルは次のようになります。
jesse
hello
yes
rifle
0
1
3
20
fscanfで取り出したい行を指定できる方法はありますか?それとも、別のアプローチを取る必要がありますか?
私はテキスト ベースのゲームを作成しており、ユーザーが保存できるようにしたいと考えています。保存すると、すべての変数がテキスト ファイルに保存されます。
それらをファイルから取り出して、特定の変数とポインターに割り当てる方法がわかりません。
ファイルは次のようになります。
jesse
hello
yes
rifle
0
1
3
20
fscanfで取り出したい行を指定できる方法はありますか?それとも、別のアプローチを取る必要がありますか?
C のファイル ストリームの概念では改行が明示的に区別されないため、どの行から読み取るかを指定する方法はありません。それらは単に文字として扱われます。特定の行から読み取るには、ストリームが指している現在の行番号を保持する変数を更新できる時点が見つかるまで、 fseek
andを使用して前方にループする必要があります。fgetc
'\n'
これを回避する 1 つの方法は、固定オフセットで情報を取得することです。たとえば、プレイヤー情報を格納する場合、プレイヤー情報を固定サイズ X にして、各構造体の固定インデックスに構成データを配置すると、すぐfseek
に適切な場所に移動できます。
ただし、構造化データがある場合は、XML や JSON など、これらの構造を本質的に表現できる形式を使用する方が適している場合があります。
ご希望の内容を正確にお伝えすることはできませんが、いくつか提案させていただきます。
テキスト ファイルの代わりに SQLite ファイルを使用します。このようにして、SQL を使用して、必要なものを正確に取得できます。ショートカット: http://www.sqlite.org/
それでもテキスト ファイルを使用する場合は、スペース区切りではなくカンマ区切りで使用してください。それはより一般的な練習です。
C プログラム用の簡単な設定リーダーを作成しました。テスト ファイルの解析方法を知っておくと役立つかもしれません https://codereview.stackexchange.com/questions/8620/coding-style-in-c