PDA

Visualizza la versione completa : [C++] Lettura da file per eseguire operazioni su funzione


Gianni91
12-09-2011, 09:19
Ciao a tutti,vorrei avere dei chiarimenti riguardo, la lettura da file con la libreria fstream..
Mettiamo il caso in cui io volessi,leggere da un file un matricola e un numero
esempio


File.txt
NAJHJD 3
SKJHJD 5
SHUJKF 6

come dico di leggere dal file fino a quando trova matricole...
In sostanza credo di dover utilizzare un ciclo,ma come faccio a dirgli quando si deve fermare??
Potreste spiearmi come funziona il processo di lettura all'interno del file??

Vi ringrazio.. :ciauz:

oregon
12-09-2011, 09:23
Documentazione ed esempi sul web sono tante

http://codesnippet.biz/c-piu-piu-leggere-e-scrivere-su-file-con-gli-stream/

http://www.cplusplus.com/reference/iostream/fstream/


Potreste spiearmi come funziona il processo di lettura all'interno del file??

All'interno del file? Cioè?

Gianni91
12-09-2011, 09:28
Originariamente inviato da oregon
Documentazione ed esempi sul web sono tante

http://codesnippet.biz/c-piu-piu-leggere-e-scrivere-su-file-con-gli-stream/

http://www.cplusplus.com/reference/iostream/fstream/

Adesso vedo un pò...


All'interno del file? Cioè?
Intendevo dire come funziona la lettura ,proprio i passi di lettura di ogni valore(a livello meccanico intendo)...
spero di essere stato più chiaro..

Gianni91
12-09-2011, 09:34
sono arrivato a qualcosa di utile..
nel momento in cui io scrivo..


char a[20];
int n;
while(ff>>a){ff>>n;}

Si ferma fino a quando,non legge tutte e tre le matricole??Ma vengono memorizzati su array differenti??

oregon
12-09-2011, 09:40
Scusa, per capirci, tu hai dubbi sulla lettura dei file o, in generale, sulla programmazione C++?

Gianni91
12-09-2011, 09:46
nono sulla lettura da file...xchè??
Magari per cercare di capirci qualcosa sto dicendo str****te,ma per il resto non ho problemi.. :zizi:

oregon
12-09-2011, 09:51
Beh, parlavi di "array differenti" ... di quali array differenti parli se ne hai indicato uno solo?

E poi, dato che parliamo di C++, è più sensato usare un oggetto string per il dato stringa e uno int per il numerico. E visto che non sai quante sono le righe, o lavori allocando dinamicamente un array o lavori con singole variabili da trattare volta per volta. In più, come da documentazione che ti avevo postato, il ciclo lo puoi scrivere, ad esempio




string nome;
int matr;

while ( ff.good() )
{
ff >> nome >> matr;

cout << nome << " " << matr << endl;
}

Gianni91
12-09-2011, 09:58
E poi, dato che parliamo di C++, è più sensato usare un oggetto string per il dato stringa e uno int per il numerico. E visto che non sai quante sono le righe, o lavori allocando dinamicamente un array o lavori con singole variabili da trattare volta per volta. In più, come da documentazione che ti avevo postato, il ciclo lo puoi scrivere, ad esempio


Allora io ho letto la soluzione del mio prof,te la posto..all'interno poi viene chiamata un'altra funzione inserimento da me creata,il tutto funziona,ma qualcosa non mi é chiaro ancora.Intendo se volessi utilizzare ciò che ho scritto per qualcosa di più complesso..
Premetto che é una funzione utilizzata per una classe,che prende dei valori e li inserisci

G::G(const char* nome){
char codice[15];
int esami;
ifstream f(nome);
if(!f)
{
cerr<<"File non trovato"<<endl;
exit(1);
}
while(f>>codice){
f>>esami;
inserisci(codice,esami);
}

}


Originariamente inviato da oregon
Beh, parlavi di "array differenti" ... di quali array differenti parli se ne hai indicato uno solo?

Io intendevo dire ,visto che viene indicato un solo array come memorizza tutte e 3 le matricole??

oregon
12-09-2011, 10:08
Originariamente inviato da Gianni91
Allora io ho letto la soluzione del mio prof,te la posto..all'interno poi viene chiamata un'altra funzione inserimento da me creata,il tutto funziona,ma qualcosa non mi é chiaro ancora.Intendo se volessi utilizzare ciò che ho scritto per qualcosa di più complesso..

Anche questa soluzione va bene, anche se utilizzi un array di char e non un oggetto string (come se lavorassi in C e non in C++).

A questo punto non capisco il tuo problema ...


Io intendevo dire ,visto che viene indicato un solo array come memorizza tutte e 3 le matricole??

Non le memorizza ... ti ho già detto, le legge in variabili che riutilizza di volta in volta nel ciclo.
Per memorizzarle, ripeto, dato che penso tu non sappia quante sono, devi gestire l'allocazione dinamica di due vettori e usarli nella lettura.

Gianni91
12-09-2011, 10:20
Originariamente inviato da oregon
A questo punto non capisco il tuo problema ...


Il problema che ho scitto qualcosa di più semplice,perché credevo di non aver capito bene il funzionamento della lettura..
A questo punto ti posto il mio reale problema.. :zizi:




Non le memorizza ... ti ho già detto, le legge in variabili che riutilizza di volta in volta nel ciclo.
Per memorizzarle, ripeto, dato che penso tu non sappia quante sono, devi gestire l'allocazione dinamica di due vettori e usarli nella lettura.

Perfetto era come credevo di aver capito... :D

Loading