2015-09-15 67 views
1

我正在編寫一個程序,我使用getline()讀取文本文件並將每行存儲在vector<string>中。C++在讀取文件之前或之後忽略字符串部分

ifstream flirfile(flir_time_dir); 
vector<string> flir_times; 
string flir_line; 

while (getline(flirfile, flir_line)) 
{ 
    flir_times.push_back(flir_line); 
} 

這是文本文件的程序讀取:

enter image description here

程序工作正常,但我想要做的就是忽略每行的一切,除了中間的十六進制字符串。換句話說,忽略第一個下劃線之前和第二個下劃線(包括下劃線)之後的所有內容。有沒有簡單的方法來做到這一點?當文件正在讀取時忽略文本還是之後線條存儲在向量中時更好?謝謝。

+1

如果固定長度格式,可以使用flir_line字符串對象SUBSTR成員函數從字符位置9子提取到24 – 911

回答

4

有一些方法可以在分離拆分字符串,這意味着你可以分割的'_'字符的字符串,只能將中間部分。

這樣做的一個簡單方法是使用std::getlinestd::istringstream

while (getline(flirfile, flir_line)) 
{ 
    std::istringstream is{flir_line}; 

    std::string dummy; 
    std::string flir; 

    std::getline(is, dummy, '_'); 
    std::getline(is, flir, '_'); 

    flir_times.push_back(flir); 
} 
+0

謝謝,這真是棒極了! – oodan123

3

如果你的編譯器支持C++ 11可以使用regular expression

#include <regex> 

// ... 

std::regex my_regex("_[^_]*_"); 

while (getline(flirfile, flir_line)) 
{ 
    std::smatch my_match; 
    if (std::regex_search(flir_line, my_match, my_regex)) 
     flir_times.push_back(my_match[0]); 
} 
相關問題