是否有从文件中读取命名列的c ++库?

时间:2012-04-13 16:37:27

标签: c++ file-io io

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

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

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

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

number letter
 8 g
 9 h
10 i

2 个答案:

答案 0 :(得分: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,请参阅this answer

答案 1 :(得分:2)

Boost split可以做你想要的,只要你可以在空格上一直分开。