PDA

Visualizza la versione completa : [c++]leggere dati da un file .txt


moritzplatz
01-01-2009, 15:43
allora io vorrei, preso un file di testo, estrarre dei dati.
nel caso particolare vorrei dati questo testo estrarre le parti evidenziate:


Meidad Sagron (209070894)
Israel 19 anni e 25 giorni, Prossimo compleanno: 29-03-2009

debole di forma, accettabile in resistenza
Una persona simpatica, tranquilla e onesta.
È disastroso in esperienza e debole in carisma.
Proprietario: fantani (dal 25-12-2008)
Indice Totale Skill (TSI): 1 000
Ingaggio: 636 €/settimana incluso 20% Bonus
Ammonizioni: 0
Infortuni: Nessuno
Attendere prego... Attendere prego...
Skill attuali
Resistenza: accettabile Parate: disastroso
Regia: debole Passaggi: scarso
Cross: scarso Difesa: buono
Attacco: debole Calci piazzati: tremendo

e sostituire alle stringhe degli interi.

ovvero nell'ultima parte, se ad esempio trovo "buono" riempire un int chiamato dif col valore 7.....

in modo da crearmi un gruppo di interi con i quali poi operare!

allora:
inizio leggendo il file grazie a fstream....
e, con un codice così:


#include <iostream>
#include <fstream>

using namespace std;

int main() {
fstream in("file.txt");
if(in.is_open()){
cout<<"";
}
else{
cerr<<"error opening file";
exit(-1);
}
string what="";
while(in>>what){
cout<<what<<endl;

}


}


ora dovrei eliminare le parti inutili.....con la funzione ignore ad esempio.....
oppure trasformare il testo in una stringa.....
che mi dite a questo punto?

grazi e a tutti e buon anno :)

shodan
01-01-2009, 16:02
Altrettanti auguri :)
Se vuoi leggere la linea completa meglio se operi così ( l'operatore >> si ferma al primo spazio):


#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
fstream in("file.txt");
if(in.is_open()){
cout<<"";
}
else{
cerr<<"error opening file";
exit(-1); // meglio evitarla in C++ per problemi legati ai distruttori. Usa return piuttosto.
}
string what="";
while(getline(in,what)){
cout<<what<<endl;

}
}

moritzplatz
01-01-2009, 16:06
ecco così la sua visualizzazione è assai migliore :)

per iniziare vorrei eliminare righe che a me non servono....che funzione posso usare?

sempre getline?

MItaly
01-01-2009, 16:07
Puoi usare il metodo ignore().

moritzplatz
01-01-2009, 16:21
come posso dirgli di ignorare alcune righe?

MItaly
01-01-2009, 16:25
#include <limits>
//...
for(int i=0;i<=numerorighedaignorare;i++)
in.ignore(numeric_limits<streamsize>::max(),'\n' );

moritzplatz
01-01-2009, 16:36
grazie!

mi è venuto in mente di creare una classe per il giocatore....
poi inserirei nel costruttore tutto questo lavoro con il file di testo....



#include <iostream>
#include <fstream>
#include <string>
#include "giocatore.h"
using namespace std;

int main() {
fstream in("file.txt");
if(in.is_open()){
cout<<"";
}
else{
cerr<<"error opening file";
return -1;
}
string what="";
while(getline(in,what)){
cout<<what<<endl;

}
}




il codice per ora è questo.
devo fare un costruttore.

il problema è che le righe che devo ignorare non sono le prime o consecutive...sono delle righe sparse!

shodan
01-01-2009, 16:41
Più che sapere come ignorare una linea, dovresti individuare il criterio su come discriminare le linee che non ti interessano. (Lunghezza? Caratteri? Numero di A o C presenti? Le dispari, le pari?)
Senza porre delle condizioni precise, non vai molto lontano.

moritzplatz
01-01-2009, 16:48
il fatto è che tutti questi file saranno dello stesso tipo....
dunque io so già quali sono le righe da eliminare!

nel caso specifico devo eliminarle tutte tranne le:
1,4,8,9,14,15,16,17!
quindi non dovrei dover dare dei criteri....

cleaner
01-01-2009, 16:58
se stai lavorando con file di testo invece che con database, la soluzione che mi è stata consigliata a me è di leggere tutte le linee(usando la funzione getline) e di riscrivere solo quelle interessate in un nuovo file di testo che avrà lo stesso nome; in questo modo di fatto "elimini".

Loading