【问题标题】:Read Text file using Boost mmap使用 Boost mmap 读取文本文件
【发布时间】:2014-02-21 06:45:50
【问题描述】:

我正在阅读以下文件:


文件.txt

Y:\Test\DOCUMENTS\DOCUMENTS\Flux Assurance 2\multi\ACTEPROC_OK\018-1-R.xml Y:\Test\DOCUMENTS\DOCUMENTS\Flux 保证 2\multi\ACTEPROC_OK\A018-2-R.xml Y:\Test\DOCUMENTS\DOCUMENTS\Flux Assurance 2\multi\ACTEPROC_OK\021-1-R.xml Y:\Test\DOCUMENTS\DOCUMENTS\Flux 保证 2\multi\ACTEPROC_OK\A021-2-R.xml Y:\Test\DOCUMENTS\DOCUMENTS\Flux Assurance 2\multi\ACTEPROC_OK\022-1-R.xml Y:\Test\DOCUMENTS\DOCUMENTS\Flux 保证 2\multi\ACTEPROC_OK\022-2-R.xml Y:\Test\DOCUMENTS\DOCUMENTS\Flux Assurance 2\multi\ACTEPROC_OK\025-1-R.xml


源代码:

#include <iostream>
#include <vector>
#include <boost/iostreams/device/mapped_file.hpp>
#include <boost/iostreams/stream.hpp>

std::vector<string> readFile(string);

int main()
{
    std::vector<string> res = readFile("file.txt");
    return 0;
}

std::vector<string> readFile(string f)
{
    boost::iostreams::stream<boost::iostreams::mapped_file_source> str(f);
    std::vector<string> app;
    for(string x; str >> x;)
    {
        app.push_back(x);
    }
    return app;
}//end

问题:

由于FluxAssurance 2之间有一个空格,所以它把空格当作分隔符。

怎样才能去掉分隔符,或者明确地识别分隔符是什么?

【问题讨论】:

  • 添加解决方案作为答案。这就是为什么它们被称为答案。

标签: file boost iostream mmap


【解决方案1】:

这与 boost 或 memorymapping 无关。

首先

str.unsetf(std::ios::skipws); 

将防止空格被用作分隔符/跳过。

其次,我认为(你没有提到任何)你想逐行阅读:

for(std::string x; std::getline(str, x, '\n');)
{
    app.push_back(x);
}

如您所见,您已经可以指定分隔符了。

最后,考虑使用解析器生成器。参见例如这里:

其中包含一个使用 Boost Spirit 解析内存映射文件的示例。

【讨论】:

  • 谢谢。是的,我实际上找到了与您的解决方案相近的解决方案。我不知道这是否有趣。我也会将它添加到我的问题中。谢谢
猜你喜欢
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多