いつもお世話になっております。
VCの質問とちょっと違うかもしれませんが申し訳ありません。
アルゴリズムの質問です。
今、iniファイルを使用して各種設定を保存するプログラムを作成しています。
///iniファイルの中身/////////
#koumoku1
name=tarou
nenrei=13
sonota=aaa
#koumoku2
name=takesi
nenrei=3
////////////////////////////
このINIファイルに対して行いたい操作は以下のとおり
<仕様>
ダイアログ等で
項目名(#で始まるカテゴリ)、名前・年齢など(項目ごとの値)
を指定して保存ボタンを押す。
項目名がすでにINIファイル内に存在した場合は書き換える。
存在しない場合は末尾にくっ付ける。
<現行>
存在するかどうかはファイルを開いて文字列検索をかけて判定しています。
また存在しない場合は後ろにくっつけているので特に問題はありません。
<質問>
既存に項目が見つかった場合はその内容を書き換えたいのですが
どのような方法があるでしょうか?
項目ごとの値が決まった数ならいいのですが
項目によって値の数も異なってきます・・・・
また項目を削除する際の方法もわかりません。
よろしくお願いします。
一応考えた案は
INIファイル中に項目名が発見したら・・・
入力した項目名と値を保存する koumoku[100]
その項目名より前のものを保存する mae[500]
その項目名の後の項目以降を保存する ato[500]
mae と ato と koumoku を順にくっ付けてINIファイルに書き出す。
です。
まだ実装してないのでなんとも言えないのですが
もし良い案があれば聞いてみたいなぁと思い質問してみました!
仕様変更が認められるならば(認められないなら説得してでも)、
コメントなど使わずに、素直にセクションを使うことをお勧めします。
これならば、iniファイル操作用の関数を使えますので、
全くファイル操作をする必要はありません。
[koumoku1]
name=tarou
nenrei=13
sonota=aaa
[koumoku2]
name=takesi
nenrei=3
Windows標準のiniファイルの形式が使えるならdairygoodsさんが言われているように
した方がよいと思いますよ。その方が不具合に悩まされないですみますし。
使える物は使うというのも必要なことですから。
ともあれ、VCに限らず、C++を使っているのですからクラス化されてはどうですか?
うまく作れば、後々まで使えるクラスになるかもしれません。
私がやるとしたらオリジナルのiniファイル用のクラスを作ると思います。
一つのカテゴリもクラス化するだろうなあ。
こういったことを考えるも結構勉強になっていいと思いますよ。
返事が遅れてすみません!
INIファイルの根本的な使い方が間違っていたんですね・・
INI操作のAPIがあるとは・・・
どうもありがとうございました^-^