具有多个值的C ++ File Parser

时间:2014-10-06 05:34:44

标签: c++ file parsing csv ifstream

我正在尝试编写C ++代码,打开csv文件并从一行读取多个输入。所以csv文件的数据类型格式是:

  

int,string,int,int

我想要做的是立即将所有这些读入变量

ifstream myfile;
myfile.open("input.csv");
string a;
int b, c, d;
while (myfile.is_open() && myfile.good())
{
    if(myfile >> b >> a >> c >> d)
         cout << a << " " << b << " "  << c << " "  << d << " " ;
    myfile.close();
}

但是当我运行我的代码时,它只是跳过if行并转到.close()行。什么都没打印出来。我认为它无法读取这些值。

我的代码出了什么问题?为什么不能读取这些值?

2 个答案:

答案 0 :(得分:3)

执行以下操作以从正确格式化的csv文件中提取令牌。

#include <sstream>
// ....

std::string line ;

while ( std::getline( myfile, line ) )
{

     std::stringstream buffer( line );
     std::string token;

     while( std::getline( buffer, token, ',' ) )
    {
       // std::cout << token << std::endl;
       // convert to int, etc
    }
}

答案 1 :(得分:1)

  

但是当我运行我的代码时,它只是跳过if行并转到.close()行。什么都没打印出来。我认为它无法读取这些值。

这是因为从CSV文件中读取第二个字段时出错。您在代码中没有做任何事情,在阅读数据时跳过逗号(,)。

您可以使用不同的策略来读取数据。我的建议:

  1. 逐行读取文件。
  2. 使用','作为分隔符将行划分为令牌。
  3. 使用std::istringstream将每个令牌转换为您希望看到的数据。