Newsgroup: it.comp.lang.c++
Titolo: Salvare e leggere su file (campi)

Ciao a tutti,
sono un neofita, sto imparando.
Tra tutti i tutorial e libri letti, non ne ho ancora trovato uno che parli
in modo soddisfacente sulla gestione dei file, imho una fra le cose basilari
della creazione di un programma.
Il mio problema č questo. Devo creare e leggere un file che si puň
considerare una specie di database: ogni riga contiene dei campi ed č
strutturato cosě:
Numero dato (int)    Indice (bool)     data (tipo di variabile?)
1111111112                1                        04/09/2001
1111111113                0                         04/09/2001
1111111114                0                           04/09/2001
...
Ora, ho provato a leggere e visualizzare le righe con un codice del genere:
#include <fstream.h>
ifstream fileIN("c:\\in.txt",ios::in);
for (n=0; fileIN; n++) {
fileIN.get(campo[n]);
 cout<< campo[n];
}
Ma naturalmente ogni riga viene cosě gestita come un array di carattery, il
che non č ciň che cerco.
Come posso strutturare la scrittura e lettura dei files?
QUalcuno ha consigli e/o link interessanti e sorgenti da darmi?
Avevo anche pensato di inserire tra un campo e l'altro un carattere
indicatore (tipo *) che indicasse la fine e l'inizio di ogni campo, ma cosě
riuscirei comunque solo ad ottenere i vari campi salvati in formato stringa:
in pratica otterrei solo il risultato di separare le righe ed i campi in piů
array stringa e non nei tipi di variabili di cui ho bisogno (int, bool e
data, questo tra l'altro non saprei nemmeno come gestirlo, ma facciamo un
passo per volta...).
Grazie infinite a tutti e scusate se per voi č una domanda banale e noiosa,
ma sono solo all'inizio č ho voglia di imparare.
Ciao!
Nick

 wrote in message
news:9n3js6$53q98$1...@ID-88617.news.dfncis.de...

Invece di fare casino mettendo tutto a mano, perchč non salvi su file 
direttamente una struttura o una classe con i dati?:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class DB
{
public:
	int iVal;
	bool bVal;
	string szData;	
};
ofstream& operator<<(ofstream& os,const DB& db)
{
	os<<db.bVal<<'\t';
	os<<db.iVal<<'\t';
	os<<db.szData<<endl;
	return os;
}
ifstream& operator>>(ifstream& os,DB& db)
{
	os>>db.bVal;
	os>>db.iVal;
	os>>db.szData;
	return os;
}
int main()
{
	DB db,db2;
	db.bVal=true;
	db.szData="15/03/2000";
	db.iVal=44;
	ofstream outFile("DB.dbf",ios::binary|ios::out);
	if(!outFile)
	{
		cerr<<"Impossibile aprire il file!\n";
		exit(-1);
	}
	outFile<<db;
	outFile.close();
	ifstream inFile("DB.dbf",ios::binary|ios::in);
	if(!inFile)
	{
		cerr<<"Impossibile aprire il file\n";
		exit(-1);
	}
	inFile>>db2;
	cout<<boolalpha<<db2.bVal<<endl;
	cout<<db2.iVal<<endl;
	cout<<db2.szData.c_str()<<endl;
	inFile.close();
	return 0;
}
Questo e solo un esempio banalissimo e per nulla ottimizzato, ma
dovrebbe
darti un idea di come potresti fare, l'istanza db viene salvata su file,
db
contiene dei valori db2 no, viene letto il file e viene inserito ciň che
c'č
dentro in db2. Non č difficile immaginare come si puň fare a leggere e
scrivere
un collezione di oggetti DB, basta qualche modifica qui e li, spero di
averti
chiarito le idee.
Ciao
-- 
Posted from 
rm4-662.dialup.tiscalinet.it
 [62.11.134.86] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 }
Chiarimento: praticamente il programma riconosce automaticamente i valori di
db2 presenti nel file? Anche qui... "C'entrano le due "funzioni" dichiarate
prima di main di cui ti ho chiesto info, suppongo".
Importante: se volessi leggere un secondo campo db presente nel file
(supponendo ce ne siano diversi) come faccio?
for (n=0, inFile, n++) {
    inFile>>db[n]
    }
Così potrebbe andare o no?
Altrimenti come posso fare?
Altra domanda (scusa ti sto sfruttando... :-) ): se non apro in binary è la
stessa cosa?
Grazie mille di tutto, mi hai chiarito sicuramente le idee, dandomi anche
nuovi spunti e naturalmente nuovi dubbi (è sempre importante avere dei dubbi
se si vuole imparare altrimenti...).
Grazie mille!

 qualche linea del tuo codice?
...
Lascio a Filippo o a chi ne ha la pazienza di risponderti nei dettagli. Mi
limito a darti un consiglio: studiati bene un buon testo sul C++ (o meglio piu'
di uno) e poi rileggili fino a che non li hai assimilati.
Una conoscenza abbastanza elementare del C++ sarebbe stata sufficiente a
chiarire TUTTI i dubbi da te espressi.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 chiarire TUTTI i dubbi da te espressi.
Visual C++ di Chris Pappas e William H. Murray III di McGRaw Hill: ho questo
libro, ma i dubbi che ho su questo libro non gli ho trovati... all' I/O su
file vengono dedicate si e no 5 o 6 pagine (in tutto ne ha 800+)
Ciao,
Nick

 wrote in message
news:9n8a0j$5qpvb$1...@ID-88617.news.dfncis.de...

Non conosco il libro ma ad occhio direi che non e' un reference del linguaggio
ma piuttosto del sistema di sviluppo MS.


 ma piuttosto del sistema di sviluppo MS.
400 pagine sono dedicate solo al C++ non all'ambiente, ad ogni modo
...poche.
Ho sbagliato acquisto, dovevo prima prendere un libro sul c++ "puro".
Bč ... cmq ce ne č anche lě da imparare...
Ciao!.
Nick

 Bč ... cmq ce ne č anche lě da imparare...
non conosco questo libro ma con il c++ standard ci fai poco :))
--
-------
sito: 
www.dadev.it
ultime: Ocx per irc testi freeware
-------