我正在读取以下文件:
File.txt
Y:\ Test \ DOCUMENTS \ DOCUMENTS \ Flux保证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 Assurance 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 Assurance 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
问题:
由于通量和保证2之间有一个空格,因此它将空格视为分隔符。
如何删除分隔符,或明确标识分隔符是什么?
这与增强或内存映射无关。
首先
str.unsetf(std::ios::skipws);
将防止空白用作定界符/跳过。
其次,我认为(您什么也没提及)您想按行阅读:
for(std::string x; std::getline(str, x, '\n');)
{
app.push_back(x);
}
如您所见,您已经可以指定定界符。
最后,考虑使用解析器生成器。参见例如这里:
其中包含一个示例,该示例使用Boost Spirit从内存映射文件中进行解析。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句