具有多个值的C++文件分析器

C++ File Parser with multiple values

本文关键字:C++ 文件 分析器      更新时间:2023-10-16

我正在尝试编写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()行。没有打印出任何内容。我认为它无法在中读取这些值

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

执行以下操作,从格式正确的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
    }
}

但当我运行代码时,它只是跳过if行,转到.close()行。没有打印出任何内容。我认为它无法在中读取这些值

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

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

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