【发布时间】:2010-11-08 20:07:34
【问题描述】:
我正在尝试使用 ifstream 以文本文件的形式解析表格,并评估/操作每个条目。但是,由于遗漏了特定项目,我无法弄清楚如何解决这个问题。考虑下表:
NEW VER ID NAME
1 2a 4 "ITEM ONE" (2001)
1 7 "2 ITEM" (2002) {OCT}
1.1 10 "SOME ITEM 3" (2003)
1 12 "DIFFERENT ITEM 4" (2004)
1 a4 16 "ITEM5" (2005) {DEC}
如您所见,有时“新”列中没有任何内容。我要做的是记下 ID、名称、年份(在括号中),并注意后面是否有大括号。
当我开始这样做时,我寻找了一个“拆分”功能,但我意识到它会因为前面提到的缺失项和标题分离而变得有点复杂。
我能想到的一件事是逐字阅读每一行,跟踪我看到的最新数字。一旦我打了引号,请注意我看到的最新数字是一个 ID(如果我使用了类似拆分的东西,则数组位置就在引号之前),然后记录所有内容,直到下一个引号(标题) ,然后最后,开始寻找其他信息的括号和大括号。但是,这似乎很原始,我正在寻找更好的方法来做到这一点。
我这样做是为了提高我的 C++ 技能并使用更大的现有数据集,所以如果可能的话,我想使用 C++,但是如果另一种语言(我正在看 Perl 或 Python)让这变得非常简单,我可以学习如何将不同的语言与 C++ 接口。我现在要做的只是筛选数据,这些数据最终将成为 C++ 中的对象,所以我仍然有机会提高我的 C++ 技能。
编辑:我也意识到这可以仅使用正则表达式来完成,但如果可能的话,我想尝试使用不同的文件/字符串操作方法。
【问题讨论】:
-
前三列的宽度总是固定的吗?
-
下面的一些 token_grid 示例怎么样:codeproject.com/KB/recipes/Tokenizer.aspx 它们非常高效、优雅且易于使用。
标签: c++ string file-io tabular