我正在尝试读取一个超过170000行的csv文件,每个条目有10列。 我使用c ++(在Visual Studio 2017中)编写了这段代码来阅读它,但它在失败之前只读取了3600个条目。
// Trial1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
ifstream file("Brightest Day.csv");
if (!file.is_open())
{
cout << "ERROR: File Open" << "\n";
}
string data[3000][10];
for (long i = 0; i < 3000; i++)
{
for (int j = 0; j < 10; j++)
{
getline(file, data[i][j], ',');
}
}
for (long i = 0; i < 3000; i++)
{
for (int j = 0; j < 10; j++)
{
cout<<data[i][j]<<" | ";
if (j == 10)
{
cout << "\n";
}
}
}
return 0;
}
即使它只能阅读大约10000个条目,我也称之为成功
答案 0 :(得分:5)
你堆满了。欢迎来到这个网站。
您的调用堆栈是为在编译时已知大小的小对象而设计的。这就是为什么your rubber ducky is wondering来自3000的原因。这是一个猜测,任何创建3001行csv的人都可能会崩溃你的程序。如果您认为10000行是成功的,那么10001行就是崩溃。
使用std::vector
。它是一个类似阵列的结构。它管理自己的大小。并且它不会将数据存储在有限的堆栈中。