基本的な質問:
データをストーリー化/変更している場合、ハードコードされたインデックスを使用してファイルの要素にアクセスする必要がありますtargetFile.getElement(5)
。ハードコードされた識別子 (内部的にインデックスに変換されます) を介して、つまりtarget.getElementWithID("Desired Element")
、または何らかの中間DESIRED_ELEMENT = 5; ... target.getElement(DESIRED_ELEMENT)
の などを使用します。
編集:またはenum
??を使用したもの
バックグラウンド:
私のプログラム (c++) は、多くの異なる'dataFile'sにデータを格納します。また、すべてのデータ ファイルのリストを別のファイル( 「listFile」)に保持しています。これには、それぞれのプロパティの一部も格納されています (以下を参照してください。ただし、名前は何行で、何行の情報がなど)。データファイルとリストファイルを管理するオブジェクトがあり、それを「fileKeeper」と呼びます。
listFile のエントリは次のようになります。
filename , contents name , number of lines , some more numbers ...
このリストにフィールドを追加/削除する可能性は間違いなくありますが、一般的には静的なままです。
現在、次のような各エントリの各要素の ID を保持する定数文字列配列があります。
const string fileKeeper::idKeys[] = { "FileName" , "Contents" , "NumLines" ... };
const int fileKeeper::idKeysNum = 6; // 6 - for example
私はこれを「良い」プログラム形式で管理しようとしています。したがって、ファイル内の行数を取得したい場合(たとえば)、「3番目の要素を取得するだけのメソッドを使用する代わりに...代わりに、次のようなことを行います:
string desiredID = "NumLines";
int desiredIndex = indexForID(desiredID);
string desiredElement = elementForIndex(desiredIndex);
ここで、関数indexForID()
は のエントリを調べidKeys
て、見つかっdesiredID
た後、対応するインデックスを返します。そしてelementForIndex(index)
実際にlistFileに入り、カンマ区切りの文字列の index 番目の要素を取得します。
問題:
これはまだかなり醜い/貧弱な形のようです。これを行う方法はありますか?そうでない場合、これが通常行われる一般的な方法は何ですか?
ありがとう!