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

标签 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}

如您所见,有时“NEW”列中没有任何内容。我要做的是记下ID,名字,年份(括号内),后面有没有大括号。

当我开始这样做时,我在寻找一个“拆分”功能,但我意识到它会有点复杂,因为前面提到的缺失项目和标题被分开。

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

我这样做是为了提高我的 C++ 技能并处理更大的现有数据集,所以如果可能的话我想使用 C++,但如果另一种语言(我正在研究 Perl 或 Python)使这变得非常容易,我可以学习如何将不同的语言与 C++ 进行交互。我现在要做的只是筛选最终会成为 C++ 对象的数据,所以我仍然有机会提高我的 C++ 技能。

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

最佳答案

如果列偏移量是真正固定的(没有制表符,只有真正的空格字符 a la 0x20)我会一次读一行(string::getline ) 并使用固定偏移量将其分解为一组四个字符串 (string::substr)。

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

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

关于c++ - 如何在 C++ 中解析基于文本的表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4127592/

相关文章:

c++ - GLSL 330 矩阵计算错误{无编译错误}

c++ - 在 Clang++ : fatal error: 'iostream' file not found 中定位 iostream

C 编程 - 限制用户输入一定数量的字符

javascript - 相当于 fopen/fprintf 的 Node.js

c++ - 无法使用 ifstream 将 txt 文件的最后一部分写入 cout

c++ - 模板类中的c++运算符重载Im正在尝试构建重载<<以打印树

c++ - 使用swap实现移动赋值

python - 在字符串中查找列表元素

arrays - Delphi 检查字符是否在 'A' 范围内。 .'Z' 和 '0' 。 .'9'

file - 使用 r+ 模式打开文件时如何删除文件内容?