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++技能.
编辑:我也意识到这可以只使用正则表达式完成,但我想尽可能尝试使用不同的文件/字符串操作方法.
如果列偏移是真正固定的(没有标签,只有真正的空间字符为一个 0x20)我会一次读取一行(string::getline)并使用固定的偏移将其分解成一组四个字符串(string::substr).
然后根据需要对每个4元组的字符串进行后处理.
我不会对偏移进行硬编码,将它们存储在描述输入格式的单独输入文件中 - 如SQL Server或其他数据库中的表描述.