Я пытаюсь прочитать конкретные значения (то есть значения @ координаты XY) из файла .csv и пытаюсь найти правильный способ определения многомерных массивов в этом .csv.
Вот пример формыиз моего файла .csv
NaN,NaN,1.23,2.34,9.99
1.23,NaN,2.34,3.45,NaN
NaN,NaN,1.23,2.34,9.99
1.23,NaN,2.34,3.45,NaN
1.23,NaN,2.34,3.45,NaN
NaN,NaN,1.23,2.34,9.99
1.23,NaN,2.34,3.45,NaN
NaN,NaN,1.23,2.34,9.99
1.23,NaN,2.34,3.45,NaN
1.23,NaN,2.34,3.45,NaN
NaN,NaN,1.23,2.34,9.99
1.23,NaN,2.34,3.45,NaN
NaN,NaN,1.23,2.34,9.99
1.23,NaN,2.34,3.45,NaN
1.23,NaN,2.34,3.45,NaN
...
Хорошо, в действительности этот файл становится очень большим.Вы можете интерпретировать строки = широты и столбцы = долготы, и, таким образом, каждый блок представляет собой почасово измеренную карту координат.Блоки обычно имеют размер столбца строки [361] [720], а периоды времени могут составлять до 20 лет (= 24 * 365 * 20 блоков), просто чтобы дать вам представление о размере данных.
Чтобы структурировать это, я подумал о сканировании через .csv и определил каждый блок как вектор t, к которому я могу получить доступ, выбрав желаемый временной шаг t = 0,1,2,3 ...
Затемв этом блоке я хотел бы перейти к конкретной линии (то есть широте) и определить ее как вектор longitudeArray.
Результатом должно быть указанное значение из координаты XY в момент времени Z.
Как вы можете догадаться, мой опыт кодирования довольно ограничен, и поэтому мой фактический вопрос может быть очень простым: как я могу расположить свои векторы, чтобы иметь возможность вызывать любое случайное значение?
Это мойпока код (к сожалению, это не так много, потому что я не знаю, как продолжить ...)
#include <fstream>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int longitude, latitude; //Coordinates used to specify desired value
int t; //Each array is associated to a specific time t=0,1,2,3... (corresponds to hourly measured data)
string value;
vector<string> t; //Vector of each block
vector<string> longitudeArray; //Line of array, i.e. latitude
ifstream file("swh.csv"); //Open file
if (!file.is_open()) //Check if file is opened, if not
print "File could..."
{
cout << "File could not open..." << endl;
return 1;
}
while (getline(file, latitude, latitude.empty())) //Scan .csv (vertically) and delimit every time a white line occurs
{
longitudeArray.clear();
stringstream ss(latitude);
while(getline(ss,value,',') //Breaks line into comma delimited fields //Specify line number (i.e. int latitude) here??
{
latitudeArray.push_back(value); //Adds each field to the 1D array //Horizontal vector, i.e. latitude
}
t.push_back(/*BLOCK*/) //Adds each block to a distinct vector t
}
cout << t(longitudeArray[5])[6] << endl; //Output: 5th element of longitudeArray in my 6th block
return 0;
}
Если у вас есть какие-либо подсказки, особенно если естьлучший способ обработки больших файлов .csv, я был бы очень признателен.
Ps: C ++ неизбежен для этого проекта ...
Tüdelüü, jtotheakob