c++ - 编程项目介绍。坚持从表创建数据文件

标签 c++ arrays

我接到了一个类项目,但我只完成了其中的一部分。该项目中有这张表:

enter image description here

如何将这些信息创建到顺序文件中以读入 C++ 程序?看起来这将是一个 3 维数组。我是不是看得太远了?

最佳答案

这取决于你想做什么。通常,如果您只是想读取它,您可以将其存储为平面文件。对于平面文件,您通常有两种常用格式,固定长度记录或逗号分隔(您可以实现其他平面文件格式,但这是两种常用格式)。

在固定长度记录中,每条记录都是固定长度,每个字段也是固定长度。 例如

Turkey             1.00Swiss        .30Roll           .30Condiments         .10
Pastrami           1.30Swiss        .40Roll           .30Condiments         .10

在逗号分隔的语言中你可以这样做 土耳其,1.00,瑞士,.30,卷,.30,调味品,.10

使用固定长度记录的缺点是,一旦指定并且取决于文件的接收者是谁,您的字段将永远无法增长。例如,如果您的价格字段是五个空格,您的最大值将是 99.99,并且您将很难增加字段大小,因为如果其他应用程序依赖它是 5 个字符,它将不再兼容。逗号分隔更灵活一些,因为分隔符是逗号。使用逗号分隔通常可以使字段变大,因为逗号是分隔符。

还有另一种选择,那就是创建一个 ini 类型,我称之为“域特定格式”作为示例,请看下面

Sandwich: Turkey
Deli Slice: Turkey,1.00
Deli Slice: Swiss,.30
Bread: Roll,.30
Condiments: .30

Sandwich: Pastrami
Deli Slice: Pastrami,1.00
Deli Slice: Swiss,.40
Bread: Roll,.30
Condiments: .10

这种格式更灵活,因为您可以添加更多字段。例如,假设您有一种名为加州的新三明治,它需要肉奶酪和鳄梨。你可以像这样扩展它

Sandwich: California
Deli Slice: Turkey, 1.00
Deli Slice: American, .30
Deli Slice: Avocado, .50
Bread: Roll,.30
Condiments: .10

有了这第三种格式和一些仔细的编程,您的新三明治将自动向后兼容。

每个文件都采用不同的读取策略。有一种叫做解析的东西,每个文件都有不同的方法。 在固定长度记录中,方法是按字符位置读取每一列。 在逗号分隔的文件中,您需要对用 C++ 读入的每一行进行标记,您有一个 strtok,但如果您使用托管 C++ .net,我相信您有一个 string.split。 使用第三个选项,您实际上会查找关键字,例如“Sandwich”、“Deli SLice”等,然后您还必须标记 itmes,因为它们

关于c++ - 编程项目介绍。坚持从表创建数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10327401/

相关文章:

c++ - 为什么通过条件运算符将引用传递给初始化列表会导致警告?

arrays - 使用 ObjectMapper Swift 3 将 Json 映射到嵌套数组

c++ - 嵌套 vector 与连续数组的性能影响

javascript - 如何在javascript中获取数组中元素的第二个索引?

java - 检查数组是否已分配大小

c++ - 如何保证对象的生命周期与成员函数的持续时间相匹配?

c++ - 在 C++ : flow error 中 Qt 下的 Gstreamer 问题

c - 尝试查找数组大小时出现 sizeof 错误

c++ - C++中的字符串指针

c++ - Rcpp 中 "List"的操作函数 - 类似于 R 中的 "Reduce function"