Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - IFSTREAM Leggere file di testo riga x riga
Forum - C/C++ - IFSTREAM Leggere file di testo riga x riga

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
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__

PM Quote
Avatar
Black Shadow (Founder Member)
Expert


Messaggi: 323
Iscritto: 30/03/2006

Segnala al moderatore
Postato alle 20:37
Domenica, 22/07/2007
Si può fare facilmente proprio con getline:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. //Definisco dei parametri facilmente modificabili
  6. #define MAX_LINES 50
  7. #define MAX_LINE_LEN 255
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11.    //Dichiaro l'array di stringhe in cui andranno i dati del file
  12.    char strings[MAX_LINES][MAX_LINE_LEN];
  13.    //Apro il file
  14.    ifstream in("file.txt");
  15.    
  16.    int j = 0;
  17.    
  18.    //Ciclo che recupera i dati del file riga per riga e li mette in strings
  19.    while ( in ) {
  20.       in.getline(strings[j++], MAX_LINE_LEN);
  21.    }
  22.    
  23.    //Ciclo esemplificativo che mostra i valori contenuti in strings
  24.    for (int y = 0 ; y < j-1 ; y++)
  25.       cout << strings[y] << endl;
  26.    
  27.    cout << "\nPremi un tasto per uscire.";
  28.    getchar();
  29.    return 0;
  30. }



Commentato a dovere, dovrebbe essere abbastanza semplice.;)


Tentando di creare un nuovo social network: http://wriler.com
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:33
Domenica, 22/07/2007
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++

  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.   char x[1024];
  9.    fstream last("log.txt", ios::out | ios::in);
  10.      last.write("1234567890", sizeof(x));
  11.      last.getline(x, sizeof(x));
  12.    last.close();
  13.    
  14. for(int i = 0; i <= strlen(x); i++) cout << x[i];
  15.  
  16. cin.get();
  17.  
  18. return 0;
  19. }



Praticamente quando mi vado a stampare x, mi da una stringa vuota  :-|

PM Quote
Avatar
WARRIOR (Ex-Member)
Guru


Messaggi: 627
Iscritto: 30/03/2007

Segnala al moderatore
Postato alle 1:07
Lunedì, 23/07/2007
Non è che ti stampa una stringa nulla, non ti stampa proprio niente ;) .
Apri cosi il file:

Codice sorgente - presumibilmente Plain Text

  1. ofstream last("log.txt");
  2. ifstream first("log.txt");



:k:


Continuerò a correre, perchè ci sarà sempre qualcuno migliore di me.

Evvia i libri, evitate gli stolti che non li integrano nella loro vita.

http://www.mentisferiche.it

Luca Tedesco
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:36
Lunedì, 23/07/2007
Mha io sapevo, chè un fstream
soprattutto se dichiarato in questo modo:
Codice sorgente - presumibilmente Plain Text

  1. fstream last("log.txt", ios::[b]out[/b] | ios::[b]in[/b]);



Mi permetteva di utilizzare uno stream sia in input che in output..

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 12:18
Lunedì, 23/07/2007
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



Mai memorizzare quello che puoi comodamente trovare in un libro.
Imparare è un'esperienza; tutto il resto è solo informazione.
L'immaginazione è più importante della conoscenza.
(A. Einstein)


Esistendo poi google...
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:15
Lunedì, 23/07/2007
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++

  1. char x[1][1024];
  2.   fstream last;
  3.     last.open("last_log.txt", ios::out);
  4.     last << "1234567890\n babbbabbu";
  5.     last.close();
  6.     last.open("last_log.txt", ios::in);
  7.     last.getline(x[0], sizeof(x[0]));
  8.     last.getline(x[1], sizeof(x[1]));
  9.     last.close();
  10.     for(int i = 0; i <= strlen(x[1]); i++) cout << x[1][i];




Ultima modifica effettuata da il 23/07/2007 alle 14:16
PM Quote
Avatar
__BlackworM__ (Member)
Pro


Messaggi: 110
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 4:19
Domenica, 17/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


‎"Ho fallito diversi esami all'università...
un mio amico li ha sempre passati tutti al primo colpo. Ora lui è ingegnere alla Microsoft, ed io, sono il capo della Microsoft".    (Bill Gates)
PM Quote