我正在尝试从管道分隔文件中获取第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
答案 0 :(得分:1)
std :: cin >>
运算符按空格或换行符读取字符串,因此在您的情况下,C/A-"WAR" FROM CAR COMPANY
的值将被截断为C/A-"WAR"
,FROM
, CAR
和COMPANY
。
您可以改用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;
}