从管道分隔文件中获取值

时间:2015-05-14 11:49:27

标签: c++ string file

我正在尝试从管道分隔文件中获取第2和第5列详细信息。

从虚拟文件读取时,第5列正在修剪。我也试过使用get line函数。如何获取字符串中的整个第5列?

文件看起来像:

1|6705|SW|447|C/A-"WAR" FROM CAR COMPANY    |||RFD|E|0|
2|6706|CA|448|CAR TYPE OR CUST. ID, REQ     |||RFD|E|0|
3|6707|CZ|448|CAR TYPE OR CUST. ID, REQ     |||RFD|E|0|

代码

  std::string cmd = "awk -F'|'  '{ print $2, $5 }' 1.txt >> tmp.txt";
    system(cmd.c_str());// extract the two columns and write to dummy file
    ifstream read( "tmp.txt");
    std::string line;

    while (std::getline(read, line)) // Read the file line by line
    {
            std::istringstream iss(line);
            string a, b;
            if (!(iss >> a >> b)) { break; } // error
            std::cout<<"a"<<a<<"  b  "<<b<<std::endl;
    }
    read.close();
    system("rm tmp.txt");

输出

  

key(string):6705,value(int):C / A-“WAR”
  key(string):6706,value(int):CAR
  key(string):6707,value(int):CAR

1 个答案:

答案 0 :(得分:1)

std :: cin >>运算符按空格或换行符读取字符串,因此在您的情况下,C/A-"WAR" FROM CAR COMPANY的值将被截断为C/A-"WAR"FROMCARCOMPANY。 您可以改用getline

while (std::getline(read, line)) // Read the file line by line
{
        std::istringstream iss(line);
        string a, b;
        iss>>a;
        getline(iss,b);//This may work
        std::cout<<"a"<<a<<"  b  "<<b<<std::endl;
}