gpt4 book ai didi

c++ - 使用 getline 和 istringstream 从 CSV 文件中读取数据

转载 作者:行者123 更新时间:2023-11-30 03:53:01 27 4
gpt4 key购买 nike

我正在尝试读取包含如下条目的 CSV 文件:

//2009-12-31 21:00:00, COUNTRY ,1.84296,350.947,60.72

这是我做的

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

int main()
{
using namespace std;
ifstream read("data.csv");

string line;

//I want to use this to hold the data temporarily
string temp[5];

while (std::getline(read, line))
{
int i=0;
std::istringstream iss(line); // string stream
while(std::getline(iss, temp[i], ','))
{
cout << i << ": " << temp[i] << endl;
++i;
};
}
}

但它没有完成我希望代码完成的工作。特别是,代码在我达到 21 后停止。这是输出

0: 2009-12-31 21:00:00
1: GRID_A
2: 1.84296
3: 350.947
4: 60.72
2010-01-01 00:00:00
5: GRID_A
6: 1.93569
7: 348.98
8: 60.64
2010-01-01 03:00:00
9: GRID_A
10: 2.30688
11: 339.444
12: 247.6
2010-01-01 06:00:00
13: GRID_A
14: 1.74453
15: 326.219
16: 587.92
2010-01-01 09:00:00
17: GRID_A
18: 2.16002
19: 289.19
20: 180.72
2010-01-01 12:00:00
21: GRID_A

然后我得到了这样的错误

_LIBCPP_INLINE_VISIBILITY
static void assign(char_type& __c1, const char_type& __c2) _NOEXCEPT
{__c1 = __c2;}
Thread 1: EXC_BAD_ACCESS...

你能告诉我哪里出了问题吗?非常感谢!

PS:原来问题与我在 Mac 上使用 Excel 保存的 CSV 文件有关。缺少换行符。

最佳答案

如果每行只有 5 列,您的代码就可以工作。如果 i 大于 4,就会出现问题。正如您所说,您的 i 是 21!您的数组不能容纳这么多元素。如果 i 超出数组范围,则应将循环留在最后。

您尝试访问彩虹之外某处的 temp[21]。难怪你会得到 BAD ACCESS。

只需将 temp 用作单个字符串即可。如果您只想输出值,则不需要数组。只需使用 string temp; 并删除那里的 [i]

关于c++ - 使用 getline 和 istringstream 从 CSV 文件中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30352819/

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