У меня есть файл, содержащий
99,0,0,0,0,0 99,1234,0011,4314,4901,4930 e.t.c.
Я хочу прочитать файл в 2D вектор целых чисел. Я довольно новичок в C ++. Все строки имеют х количество столбцов. Количество строк неизвестно. Все значения разделены запятой.
Я могу получить значения, считанные в 1-й вектор, но не могу понять, что матричная часть правильная.
Это то, что я имею до сих пор;
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string.h>
#include <string>
#include <vector>
//declare data variables
using namespace std;
typedef vector<int> mline;
typedef vector<mline> matrix;
matrix sdata;
matrix confdata;
int writeFile();
int readFile();int main ()
{
readFile();
writeFile();
}
int writeFile ()
{
return 0;
}
int readFile()
{
int i = 0;
int j = 0;
//int k = 0;
int spos = 0;
int epos = 0;
int endpos = 0;
int slenght = 0;
int buffersize;
int tmpint;
stringstream outs;
mline tmpline;
string filename = "sensorbase.txt";
string tmp;
vector<string> bufferstr;
string delimiter = ",";
ifstream inputFile(filename);
string line;
while (getline(inputFile, line))
{
istringstream ss(line);
ss >> tmp;
bufferstr.push_back(tmp);
i++;
}
buffersize = bufferstr.size();
while(j<buffersize){
tmpline.clear();
endpos = bufferstr[j].rfind(delimiter);
slenght = bufferstr[j].size();
while (epos+1<endpos){
if (epos!=0){spos = epos+1;}
epos = bufferstr[j].find(delimiter, spos);
//printf("%s",bufferstr[j].substr(spos, epos-spos).c_str());
outs.clear();
outs << bufferstr[j].substr(spos, epos-spos);
outs >> tmpint;
tmpline.push_back(tmpint);
}
if (slenght>endpos){
spos = endpos+1;
//printf("%s",bufferstr[j].substr(spos, slenght- endpos).c_str());
outs.clear();
outs << bufferstr[j].substr(spos, slenght-endpos);
outs >> tmpint;
tmpline.push_back(tmpint);
}
sdata.push_back(tmpline);
j++;
spos = 0;
epos = 0;
}
printf("A3 %i, B5 %i",sdata[0][0],sdata[0][1]);
return 0;
}
Ты можешь использовать std::getline
с разделителем ,
чтобы получить целое число перед каждой запятой:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
typedef std::vector<int> mline;
typedef std::vector<mline> matrix;
int main()
{
std::ifstream in("sensorbase.txt");
matrix data;
for (std::string line, number; std::getline(in, line);)
{
mline temp;
std::istringstream iss(line);
while (std::getline(iss, number, ','))
{
temp.push_back(std::stoi(number));
}
data.push_back(temp);
}
}
Других решений пока нет …