我正在尝试使用以下条目读取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;
};
}
}
但它没有做我想要的代码。特别是,代码在整数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文件有关。缺少换行符。
答案 0 :(得分:2)
如果每行只有5列,则代码可以正常工作。如果i
比4大,你会遇到问题。正如你所说,i
是21!你的数组不能占用这么多元素。如果i
超出数组范围,则应将循环保留在最后。
您尝试访问位于彩虹之外的temp[21]
。难怪你得到了糟糕的访问权。
只需将temp
用作单个字符串即可。如果您只想输出值,则无需数组。只需使用string temp;
并在那里删除[i]
。