2012-02-03 66 views
1

我的数据文件的第一行是数据的三个(或四个)栏标题:函数getline()函数蕉标题一起

%b02_a08 b02_a08_counts b02_a08_eu 

正如你所看到的,列制表符分隔。当我使用getline()时,它将整条线路拼凑在一起。如果我使用getline(,,'\t'),则会为该行返回%b02_a08。我需要把这一行分开,因为我读了每个标题。

如果有人知道如何从数据文件中读取头文件并将它们放入vector<string>以便我可以在其上运行Regex以找到其中包含“eu”的文件,那就是我所需要做的。那么,读取数据列,我可能会遇到同样的TAB分隔问题。

+0

(猜测语言是'C++'的矢量引用,请不要忘记下次添加语言标记,并纠正这一个,如果我弄错了。 ) – Mat 2012-02-03 13:52:51

回答

0

使用流路......

中,

// process the header 
std::getline(some_input_stream, line)) 
{ 
    std::istringstream str(line); 
    // Now reaad each field 
    str >> header_1 >> header_2 >> header_3; 
    if (str >> header_4) 
    { 
    // process the optional column 
    have_col_4 = true; 
    } 
} 

// Now to read the rows 
while(some_input_stream >> col_1 >> col_2 >> col_3) 
{ 
    if (have_col_4) 
    some_input_stream >> col_4; 
} 

最后一个块可以std::getline做太(即读取一行,构建一个流,然后从流中读取) ,但这往往会稍微慢一点...

+0

我将如何使用push_back()来放置str(或“liness”,whic h是我的)将标题放入一个向量中?: 'getline(datFile,line); istringstream liness(line); liness >> 而 { \t函数getline(liness,温度, '\ T')(liness.end!); \t header.push_back(temp); }' – user1187621 2012-02-03 14:11:48

+0

您可以使用@ dasblinkenlight的答案中时髦的'copy'行或者简单的while循环('while(liness >> header_item){vec.push_back(header_item);}' - 记住流会使用空格作为字符串的分隔符) – Nim 2012-02-03 14:15:41

+0

header_item是我需要声明的字符串? – user1187621 2012-02-03 14:20:41