()
Newbie
Messaggi:
Iscritto:
|
CMT (Come da Titolo) vorrei sapere come leggere il contenuto di un file di testo riga per riga, in modo da poterne memorizzare il contenuto su più stringhe..
Ho trovato la funzione getline, ma non credo faccia al caso mio o no?
Grazie dell'ascolto
__GiReX__
|
|
Black Shadow (Founder Member)
Expert
Messaggi: 323
Iscritto: 30/03/2006
|
Si può fare facilmente proprio con getline:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <fstream> using namespace std; //Definisco dei parametri facilmente modificabili #define MAX_LINES 50 #define MAX_LINE_LEN 255 int main(int argc, char *argv[]) { //Dichiaro l'array di stringhe in cui andranno i dati del file char strings[MAX_LINES][MAX_LINE_LEN]; //Apro il file ifstream in("file.txt"); int j = 0; //Ciclo che recupera i dati del file riga per riga e li mette in strings while ( in ) { in.getline(strings[j++], MAX_LINE_LEN); } //Ciclo esemplificativo che mostra i valori contenuti in strings for (int y = 0 ; y < j-1 ; y++) cout << strings[y] << endl; cout << "\nPremi un tasto per uscire."; getchar(); return 0; }
|
Commentato a dovere, dovrebbe essere abbastanza semplice.
|
|
()
Newbie
Messaggi:
Iscritto:
|
Ok grazie della risposta, ma purtroppo non riesco a verificare il tutto perchè riscontro un altro errore.
Ma scusate sono io che ricordo male o un fstream vale sia in output che in input?
Perchè così a me non va:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <fstream> #include <cstring> using namespace std; int main() { char x[1024]; fstream last("log.txt", ios::out | ios::in); last.write("1234567890", sizeof(x)); last.getline(x, sizeof(x)); last.close(); for(int i = 0; i <= strlen(x); i++) cout << x[i]; cin.get(); return 0; }
|
Praticamente quando mi vado a stampare x, mi da una stringa vuota
|
|
WARRIOR (Ex-Member)
Guru
Messaggi: 627
Iscritto: 30/03/2007
|
Non è che ti stampa una stringa nulla, non ti stampa proprio niente .
Apri cosi il file:
Codice sorgente - presumibilmente Plain Text |
ofstream last("log.txt");
ifstream first("log.txt");
|
|
|
()
Newbie
Messaggi:
Iscritto:
|
Mha io sapevo, chè un fstream
soprattutto se dichiarato in questo modo:
Codice sorgente - presumibilmente Plain Text |
fstream last("log.txt", ios::[b]out[/b] | ios::[b]in[/b]);
|
Mi permetteva di utilizzare uno stream sia in input che in output..
|
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
si ho controllato nella reference facendo ios:in|ios:out fa da edit
Cmq non vedo perchè continuare a usare vecchiume cone array di caratteri per reinventarsi le stringhe, usa la classe string e un vector<string>.
Ultima modifica effettuata da netarrow il 23/07/2007 alle 12:24 |
|
()
Newbie
Messaggi:
Iscritto:
|
Si netarrow anche te hai ragione, ma non mi piace usare cose che ancora non ho studiato (e cioè non sono comprese nella parte in cui sono arrivato del mio libro in C++).
Comunque aprendolo in input e output il file non mi si crea proprio, va solo se lo chiudo e lo riapro come ho fatto qua giù.
Ringrazio comunque WARRIOR per l'aiuto sul getline()
perchè funziona alla grande.
Ecco:
Codice sorgente - presumibilmente C/C++ |
char x[1][1024];
fstream last;
last.open("last_log.txt", ios::out);
last << "1234567890\n babbbabbu";
last.close();
last.open("last_log.txt", ios::in);
last.getline(x[0], sizeof(x[0]));
last.getline(x[1], sizeof(x[1]));
last.close();
for(int i = 0; i <= strlen(x[1]); i++) cout << x[1][i];
|
Ultima modifica effettuata da il 23/07/2007 alle 14:16 |
|
__BlackworM__ (Member)
Pro
Messaggi: 110
Iscritto: 16/08/2008
|
scusate l'intromissione ed anche in ritardo ma mi potresti dire quel estratto << "1234567890\n babbbabbu";
a cosa è riferito
è un parametro standard o viene letto al momento e se viene letto li non dovrebbe trovarsi quella stringa ma qualcosa per recuperare la stringa
|
|