Oppure

Loading
22/07/07 16:57
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__
22/07/07 18:37
Black Shadow
Si può fare facilmente proprio con getline:

#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.;)
aaa
22/07/07 19:33
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:

#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 :-|
22/07/07 23:07
WARRIOR
Non è che ti stampa una stringa nulla, non ti stampa proprio niente ;) .
Apri cosi il file:

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


:k:
aaa
22/07/07 23:36
Mha io sapevo, chè un fstream
soprattutto se dichiarato in questo modo:
fstream last("log.txt", ios::[b]out[/b] | ios::[b]in[/b]);


Mi permetteva di utilizzare uno stream sia in input che in output..
23/07/07 10:18
netarrow
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 23/07/07 10:24
aaa
23/07/07 12:15
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:

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 23/07/07 12:16
17/08/08 2:19
__BlackworM__
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
aaa