2014-01-29 24 views
1

我讀了以下文件:閱讀的文本文件,使用Boost MMAP


FILE.TXT

Y:\測試\ DOCUMENTS \文檔\通量保證 2 \多\ ACTEPROC_OK \ 018-1-R.xml Y:\ Test \ DOCUMENTS \ DOCUMENTS \ Flux 保證2 \多\ 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 \多\ ACTEPROC_OK \ A021-2-R.xml Y:\ Test \ DOCUMENTS \ DOCUMENTS \ Flux Assurance 2 \ multi \ ACTEPROC_OK \ 022-1-R.xml Y:\ Test \ DOCUMENTS \ DOCUMENTS \助焊劑 保證2 \多\ ACTEPROC_OK \ 022-1,022-2,R.xml Y:\測試\ DOCUMENTS \文檔\通量保證 2 \多\ 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的空間,則認爲空間作爲分隔符。

如何刪除分隔符或明確標識分隔符是什麼?

+0

添加解決方案作爲答案。這就是爲什麼他們被稱爲答案。 –

回答

1

這與boost或memorymapping沒有任何關係。

首先

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

將阻止空格被用作分隔符/跳過。

其次,我認爲(你不提任何說)你想通過行改爲:

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

正如你可以看到你已經可以指定分隔符。

最後,考慮使用解析器生成器。見例如在這裏:

其中包含使用升壓精神從內存映射文件解析的例子。

+0

謝謝。是的,我確實找到了一個解決方案給你的。我不知道這是否有趣。我也將它添加到我的問題。謝謝 –