基本问题:
如果我正在记录/修改数据,我是否应该通过索引硬编码索引访问文件的元素,即targetFile.getElement(5)
;通过硬编码的标识符(内部翻译成索引),即target.getElementWithID("Desired Element")
,或使用一些中间值DESIRED_ELEMENT = 5; ... target.getElement(DESIRED_ELEMENT)
等。
编辑:或者使用enum
??
背景:
我的程序 (c++) 将数据存储在许多不同的 'dataFile' 中。我还在另一个文件中保留了所有数据文件的列表——一个“listFile” ——它还存储了每个文件的一些属性(见下文,但即它的名称是什么,它有多少行信息有等)。有一个管理数据文件和列表文件的对象,称之为'fileKeeper'。
listFile 的条目类似于:
filename , contents name , number of lines , some more numbers ...
我绝对有可能从此列表中添加/删除字段 --- 但总的来说,它们将保持静态。
现在,我有一个常量字符串数组,它保存每个条目中每个元素的标识,例如:
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 个元素。
问题:
这看起来仍然很丑陋/形式不佳。有没有办法我应该这样做?如果不是,通常有哪些一般方法可以做到这一点?
谢谢!