PDA

View Full Version : [C++] Lavorare con i file.


Wing_Zero
23-07-2008, 09:42
Ciao a tutti,
anzitutto grazie in anticipo a chi mi aiutera'.

Stavo creando un programmino stupido per windows, giusto per "skillarmi" un po' col C++.
Solo che sono arrivanto di fronte ad un problema:
Come posso fare il parsing di un file di testo in C++?
In C lo so fare senza problemi(fscanf->identificatori di tipo -> array di destinazione) , solo che volevo farlo con l'FSTREAM del C++. Come si fa?
Ovvero dato un puntatore a file, so che nel file ci sono righe del tipo:
carattere numeroint e stringa (es: A 1987 pippo) fineriga.
Come faccio con l'fstream a leggeere i dati riga per riga ed a metterli in un array....?
Se mi volete dare una mano ve ne sono grato!

Ciao
Wing

tomminno
23-07-2008, 09:53
Qualcosa del genere penso possa essere un inizio:


#include <fstream>

using namespace std;
...

ifstream ifs("nomefile");
if (ifs.is_open())
{


string line;
while(getline(ifs,line))
{
...
}

}

Wing_Zero
23-07-2008, 10:13
Qualcosa del genere penso possa essere un inizio:


#include <fstream>

using namespace std;
...

ifstream ifs("nomefile");
if (ifs.is_open())
{


string line;
while(getline(ifs,line))
{
...
}

}


Grazie 1000 per l'aiuto.
Pero' forse nn mi sono spiegato bene io. mea culpa :(
Quello che intendevo io, era fare il "parsing" di una riga.
La funzione getline la conoscevo, quello che nn riesco a fare e' come fare il parsing di una riga, memorizzando elemento x elemento.
Come ho scritto sopra!

Grazie cmq ;)
Ciao
Wing

tomminno
23-07-2008, 12:03
Grazie 1000 per l'aiuto.
Pero' forse nn mi sono spiegato bene io. mea culpa :(
Quello che intendevo io, era fare il "parsing" di una riga.
La funzione getline la conoscevo, quello che nn riesco a fare e' come fare il parsing di una riga, memorizzando elemento x elemento.
Come ho scritto sopra!

Grazie cmq ;)
Ciao
Wing

Cioč ti serve una specie di split sulla stringa?


vector<string> fields;
string temp = line;
int separatorPos = -1;
while((separatorPos = temp.find(separator)) != temp.npos)
{
fields.push_back(temp.substr(0,separatorPos));
temp = temp.substr(separatorPos);
}