1

我经常处理看起来像这样的文件(为了与 R 兼容):

# comments
# more comments
col1 col2 col3
1 a hi
2 b there
. . .

很多时候,我想将 col2 读入向量或其他容器中。编写一个解析这种文件的函数并不难,但如果没有经过良好测试的库可以为我做这件事,我会感到惊讶。有这样的图书馆吗?(正如我所说,自己动手并不难,但由于我不是 C++ 专家,所以使用允许我使用任意容器来包含任意数据类型的模板对我来说会有些麻烦。)

编辑:我知道我想要的列的名称,但不知道这个特定文件中的列的顺序。列由未知数量的空格分隔,可能是制表符或空格(可能不是两者)。每行的第一个条目前面可能有也可能没有空格,有时这会在一个文件中改变,例如

number letter
 8 g
 9 h
10 i
4

2 回答 2

2

我不知道有任何 C++ 库可以做到这一点。然而,一个简单的解决方案是使用 linux cut。您必须先删除注释,这可以使用 sed 轻松完成:

sed -e '/^#/d' <your_file>

然后您可以应用以下命令,该命令将仅从第三列中选择文本:

cut -d' ' -f3 <your_file>

您可以将它们与管道组合在一起以使其成为单个命令:

sed -e '/^#/d' <your_file> | cut -d' ' -f3 <your_file>

您可以以编程方式运行此命令,然后只需将每一行附加到 stl 容器。

//  pseudocode
while(file.hasNextLine())
{
  container << file.readNextLine();
}

有关如何cut从代码中实际运行,请参阅此答案

于 2012-04-13T16:57:46.177 回答
2

Boost split可以做你想做的事,前提是你可以始终如一地分割空白。

于 2012-04-13T17:10:15.773 回答