从管道分隔文件中获取值

Posted

技术标签:

【中文标题】从管道分隔文件中获取值【英文标题】:Get values from the pipe separated file 【发布时间】:2015-05-14 11:49:26 【问题描述】:

我正在尝试从管道分隔文件中获取第 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");

输出

键(字符串):6705,值(整数):C/A-“WAR” 键(字符串):6706,值(整数):汽车 键(字符串):6707,值(整数):汽车

【问题讨论】:

【参考方案1】:

std::cin &gt;&gt;运算符通过空格或换行符读取字符串,因此在您的情况下,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;

【讨论】:

以上是关于从管道分隔文件中获取值的主要内容,如果未能解决你的问题,请参考以下文章

通过 http 管道将逗号分隔的值转换为 list<string>

WSO2 EI:在csv文件中添加管道分隔符

从 xml 标签获取值到 unix 中的逗号分隔文本文件

在python中解析管道分隔文件

从空格分隔的 .dat 文件中获取日期时间 - python/pandas [重复]

SQL 从 XML 中获取列的逗号分隔值