Ciao, sono un principiante di C++, che è anche il primo linguaggio di programmazione che abbia mai usato. Poiché principalmente ne ho bisogno per analizzare dati di esperimenti stavo provando a scrivere una funzione che accettasse in input un file (nella funzione il nome del file) diviso in blocchi di dati al cui inizio si trova la stringa “/*” e alla fine la stringa "*/". La funzione dovrebbe leggermi i dati di ogni blocco e inserirli in un vettore, per poi inserire ogni vettore in un vettore di vettori. Per intenderci: vorrei accettasse un file scritto così:
/*
3,2
3,11
*/
/*
7,11
*/
La funzione che ho scritto è la seguente:
Poiché compilando ho notato che mi creava dei vettori che contenevano il blocco desiderato ma anche tutti quelli precedenti, ho provato a creare il ciclo for per eliminare i blocchi precedenti, ma mi dà errore quando uso la funzione erase.
Sono grato a chiunque possa darmi una mano,.
vector<vector<double>> lettura_file (string nome_file){
vector<vector<double>> vettore_di_dati;
vector<double> dati;
double valore;
ifstream fin(nome_file);
if(!fin.is_open()){
cout << "File non aperto correttamente " << endl;
}
else{
cout << "File aperto correttamente " << endl;
}
string line;
while (getline(fin, line)) { // Leggo il file riga per riga
if (line== "/*") {
while (getline(fin, line)) { // Continuo a leggere finché non trovo la fine del commento
if (line == "*/") {
for(int i = 0; i < vettore_di_dati.size(); i++){
vettore_di_dati.push_back(dati);// Aggiungo i dati al vettore principale
for(auto c : vettore_di_dati.at(i))
vettore_di_dati.erase(c); //Il compiler mi dà errore
continue;
}
} else {
istringstream iss(line);
double valore;
while (iss >> valore) { // Leggo i valori dalla riga
dati.push_back(valore); // Aggiungo il valore al vettore temporaneo
}
}
}
}
}
for(auto c : vettore_di_dati)
for(auto d : c)
cout << d << endl;
return vettore_di_dati;
}