gpt4 book ai didi

c++ - 通过条目维护/更新/访问文件的“良好”编程形式

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:50 26 4
gpt4 key购买 nike

基本问题:

如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElementWithID("Desired Element"),或使用一些中间的 DESIRED_ELEMENT = 5; ... target.getElement(DESIRED_ELEMENT)

编辑:或者使用 enum 的东西??


背景:

我的程序 (c++) 将数据存储在许多不同的“数据文件” 中。我还在另一个文件中保留了所有数据文件的列表---一个'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

我正在尝试以“良好”的程序化形式管理这些东西。因此,当我想检索文件中的行数时(例如),而不是使用只检索“第三”元素的方法......相反,我会做类似的事情:

string desiredID = "NumLines";
int desiredIndex = indexForID(desiredID);
string desiredElement = elementForIndex(desiredIndex);

其中函数 indexForID() 遍历 idKeys 的条目,直到找到 desiredID 然后返回它对应的索引。 elementForIndex(index) 实际上进入 listFile 以检索逗号分隔字符串的第 index 个元素。


问题:

这看起来仍然很丑陋/形式不佳。有什么方法可以?如果不是,通常有哪些一般方法可以做到这一点?

谢谢!

最佳答案

我喜欢使用字符串作为键的方式。您可以使用 std::map<string, int> 将字符串映射到数字.然后你可以做

std::map<string, int> columns;
columns["FileName"] = 0;
columns["Contents"] = 1;
columns["NumLines"] = 2;

然后可以引用columns["Contents"] ,例如,获取列 ID。最好是通过一个函数来完成,如果你拼错了一个键,它会通知你。一些这样的代码:

std::map<string, int>::iterator it = columns.find(key);
if (it == columns.end()) { // key not in columns
// report error here

关于c++ - 通过条目维护/更新/访问文件的“良好”编程形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13899668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com