我正在尝试编写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()
行。什么都没打印出来。我认为它无法读取这些值。
我的代码出了什么问题?为什么不能读取这些值?
答案 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文件中读取第二个字段时出错。您在代码中没有做任何事情,在阅读数据时跳过逗号(,
)。
您可以使用不同的策略来读取数据。我的建议:
','
作为分隔符将行划分为令牌。std::istringstream
将每个令牌转换为您希望看到的数据。