如何在C++中解析基于文本的表

noi*_*olo 4 c++ string file-io tabular

我试图使用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}
Run Code Online (Sandbox Code Playgroud)

如您所见,有时"新"列中没有任何内容.我想要做的是记下身份证,姓名,年份(括号内),然后注意是否有牙箍.

当我开始这样做的时候,我寻找了一个"分裂"功能,但我意识到由于前面提到的缺失项目和标题分离,它会有点复杂.

我能想到的一件事就是逐字逐句地读取每一行,跟踪我看到的最新数字.一旦我点到一个引号,请注意我看到的最新数字是一个ID(如果我使用了像分裂之类的东西,数组位置在引号之前),然后保留所有内容的记录,直到下一个引号(标题) ,最后,开始寻找其他信息的括号和括号.然而,这看起来非常原始,我正在寻找一种更好的方法来做到这一点.

我这样做是为了提高我的C++技能并使用更大的现有数据集,所以如果可能的话我想使用C++,但如果另一种语言(我正在看Perl或Python)使这简单易行,我可以只学习如何使用C++连接不同的语言.我现在要做的只是筛选数据,最终将成为C++中的对象,所以我仍然有机会提高我的C++技能.

编辑:我也意识到这可以只使用正则表达式完成,但我想尽可能尝试使用不同的文件/字符串操作方法.

Ste*_*end 6

如果列偏移是真正固定的(没有标签,只有真正的空间字符为一个 0x20)我会一次读取一行(string::getline)并使用固定的偏移将其分​​解成一组四个字符串(string::substr).

然后根据需要对每个4元组的字符串进行后处理.

我不会对偏移进行硬编码,将它们存储在描述输入格式的单独输入文件中 - 如SQL Server或其他数据库中的表描述.