gpt4 book ai didi

c++ - 在 C++ 中读取 csv 列名

转载 作者:行者123 更新时间:2023-11-28 02:08:09 25 4
gpt4 key购买 nike

我是面向对象编程的新手。首先,我试图从 csv 文件中读取以下数据结构并解析第一行(标题)并将字符串推回到 vector 中。其次,我想读取第一行(美国)的客户信息并提取名称和整数值(14400000)。到目前为止,我现有的代码确实读取了这些列。但是,某些字符串中有多余的空格并对其进行修剪。

+------------------------------------------------------+
|,ABB LLC,Phil manu ,Products North America Inc.,Mapn, |
+------------------------------------------------------+
| USA-14400000,,,, |
| Quantity,14155572,14435598,14298563,14311206 |
| Index,US-GC,EU-HT,AS-IR,US-PT |
| Period(WEEKS),3,3,3,3 |
| cost,6278,5341,7394,7069 |
+------------------------------------------------------+

这是我的代码。

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

void ReadTest()
{
string filename = doe->ScenarioDir( ) + "/test.csv"; // Read data
ifstream fin( filename );
if ( fin == NULL )
{
cout << "Missing test.csv file." << endl;
exit(1);
}

cout << "\nReading file " << filename << endl;

vector<string> suppliersList;
string str, supplierName;

getline( fin, str );
stringstream linestr( str );
getline( linestr, supplierName,',' );

while ( linestr.good() )
{
getline( linestr, supplierName, ',' );
suppliersList.push_back(supplierName);
}
std::cout << suppliersList[0] << ' ';
}

输出是:ABB LLC

如有任何帮助,我们将不胜感激!

最佳答案

您的代码按设计运行。以下行显然只打印第一个元素:

std::cout << suppliersList[0] << ' ';

如果您按如下方式更改它:

for (auto &x: suppliersList)
std::cout << x << ' ';

您将获得完整列表:

ABB LLC Phil manu  Products North America Inc. Mapn  

顺便说一句:

  • 你真的应该用 if(!fin) 替换 if(fin==NULL)
  • 并且您应该循环读取操作:while(getline(linestr, supplierName, ',' )) 而不是 while(linestr.good()) 随后通过阅读你会尝试处理,即使它会失败。

编辑:如何去掉空格

如果你想去掉空格,使用copy_if()back_inserter()做如下:

...
string str, field;
...
getline( linestr, field,',' );

while ( getline( linestr, field, ',' ) )
{
string supplierName;
copy_if(field.begin(), field.end(), back_inserter<string>(supplierName),[](char a){return !isspace(a);});
suppliersList.push_back(supplierName);
}
...

这会给你:

ABBLLC Philmanu ProductsNorthAmericaInc. Mapn

关于c++ - 在 C++ 中读取 csv 列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com