PDA

Visualizza la versione completa : [C++] I/O su file per una rubrica telefonica


Satore11
07-11-2008, 09:46
Salve a tutto il Forum,
mi sono appena iscritto, dando un'occhiata in giro per le altre discussioni
ho notato un'alto livello di preparazione dei membri del Forum stesso...
Appunto per questo ho deciso di far parte anch'io di questo forum sperando
di imparare molto da voi esperti...

Arrivo alla richiesta...Ho creato una rubrica telefonoca(Dev C++), volevo un
consiglio su come poter identificare i contatti che vengono memorizzati nel
file "rubrica.txt"..
..ecco come viene memorizzato ogni singolo contatto:
---------------------------------------------------------------------------

void aggiungi::addfile(char nomex[], char cognomex[], char telefonox[],
char cellularex[], char emailx[], char indirizzox[], char notex[])
{

ofstream out;
out.open ("Rubrica.txt", ios::app);
ifstream in;
in.open("Variabile.txt", ios::in);
int i;
in >> i;

out << "Contatto: "<< i + 1 <<"\n";
ofstream opn;
opn.open("Variabile.txt", ios::out);
opn << i + 1;

out << "-----------------------------------\n"
"Nome: " << nomex << "\n"
"Cognome: " << cognomex << "\n"
"Telefono: " << telefonox << "\n"
"Cellulare: " << cellularex << "\n"
"E-mail: " << emailx << "\n"
"Indirizzo: " << indirizzox << "\n"
"Note: " << notex << "\n"
"-----------------------------------\n";
opn.close();
in.close();
out.close();
}

--------------------------------------------------------------------------

Ho bisogno di identificare i contatti perchè nel menu del programmino vorrei inserire
la voce "Modifica contatto" e anche "Rimuovi Contatto"...
Accento anche qualche altro sistema...
Grazie Anticipatamente

Saluti Satore11

Stoicenko
07-11-2008, 09:56
Benvenuto. :ciauz:

Come primo consiglio ti riporto alla lettura del regolamento che è obbligatoria ed indispensabile, e all'uso dei tag code o php per postare il codice.. :D

Cosa intendi per "identificare i contatti"?

Satore11
07-11-2008, 10:10
Ciao e Grazie...Ho letto il regolamento appena adesso dopo aver postato il primo messagio
(dovevo fare al contrario, loso!!)...
Comunque...
In base al codice scritto, il programma salva i singoli contatti in un unico file(li stampa
su file secondo l'ordine prima postato)
ma come faccio a modificare, per esempio, il
secondo contatto?
Oppure a cancellare il 4?
Non riesco a trovare una soluzione a questo mio
problema...nel forum si parla di seekg, getline(), ma non riesco ad utilizzarli per questo uso
specifico...
Spero di essere stato chiaro nell'esporre il problema.
Grazie Anticipatamente

Saluti Satore11


NOTE:Avrete notato la mia ignoranza nell'argomento, sono ancora fresco di programmazione,
autodidatta per lavoro e passione, è da circa un mese che pratico questa meravigliosa arte.

Stoicenko
07-11-2008, 10:45
Ti consiglio di affiancarti un buon libro.. gli autodidatti in programmazione sono poco produttivi..

Cmq, per quello che intendi fare, e sconsigliabile un file di testo.. meglio un database..

Satore11
07-11-2008, 10:54
Si certo, studio anche da libri e manuali, però non riesco a trovare una funzione
che si adatti all'utilizzo nel mio programma...

Tu parli di database...
Ti secca spiegarti meglio??
Grazie Anticipatamente

Saluti Satore11

Stoicenko
07-11-2008, 11:11
L'utilizzo di file di testo per immagazzinare dati complessi è molto scomodo
Se utilizzi un db tipo mysql o access per esempio che sono semplici da mantenere ti semplifica la vita.. usi comandi sql per scrivere e prelevare dati e non ti devi preoccupare di come vengono organizzati..

Satore11
07-11-2008, 11:20
Si ho appena letto una spiegazione veloce dei database,
Forse chiedo troppo,...ma potresti indicarmi una guida all'utilizzo dei database?!
razie a tutti per la disponibilità...
("Quindi se decido di utilizzare il database al posto del file .txt, dovrò riscrivere il
codice!!!...Perchè da quello che sono riuscito a intuire dalla spiegazione che ho appena letto, il database, si utilizza con comandi specifici, cmq...non è un problema!...")
Forum Grandioso!!!
Grazie Anticipatamente

Saluti Satore11

Satore11
07-11-2008, 17:48
Eccomi dinuovo qua...
Ho fatto una ricerca stressante e lunga per trovare un soluzione al mio stesso problema...
Posso dire di aver risolto (in parte) il problema posto questa mattina...
in pratica sbagliavo nel scrivere su file in questo modo:


out << "-----------------------------------\n"
"Nome: " << nomex << "\n"
"Cognome: " << cognomex << "\n"
"Telefono: " << telefonox << "\n"
"Cellulare: " << cellularex << "\n"
"E-mail: " << emailx << "\n"
"Indirizzo: " << indirizzox << "\n"
"Note: " << notex << "\n"
"-----------------------------------\n";

Ho dedotto che, memorizando i dati in questa maniera:


ofstream scrivi;
scrivi.open("prova4.txt", ios::out);
system("PAUSE");
scrivi << nomex << "," << xognomex << "," << telefonox << "," << cellularex; \\eccetera

...ogni riga del file conterrà un contatto, mentre una riga conterrà tutti i dati riguardanti
il contatto stesso(Utilizzando un "Separatore" ',' ...)...
...
Ecco il mio problema...dopo aver memorizzato i dati(riga per riga), come faccio a stamparli
a video?
Si dovrebbe usare un'istruzione che ti legge un'intera riga e ad ogni ',' memorizza
i dati in variabili diverse.
esempio:
prima virgola:
cin >> nomex(come da codice).
seconda virgola:
cinn >> cognomex;
etc...

avrei ipotizzato un mezzo codice ma da completare...


...
char memoria[99999];
ifstream leggi;
leggi.open("File.txt", ios::in);

while (!leggi.eof()){ \\qui dovrei inserire un ?ciclo for?
leggi.getline(file, 99999); \\però non riesco...
cout << file << "\n";
}


Non so se ho chiarito il mio dubbio:)
Attendo risposta.
Grazie Anticipatamente

Saluti Satore11

Loading