PDA

Visualizza la versione completa : [C] Numero progressivo su file


kalindran
19-09-2013, 13:14
In un progetto in C ho creato una procedura per l'inserimento e la scrittura su file di uno (o più record) contenenti campi stringa come NOME, COGNOME, TELEFONO...etc e soprattutto ho un campo ID che deve contenere un intero che farà da numero progressivo. Come faccio a ogni inserimento a tener traccia dell'ID dell'ultimo record inserito così da poterlo maggiorare di 1?

*Il campo ID non deve essere inserito dall'utente, ma calcolato dal programma a partire dal primo inserimento

oregon
19-09-2013, 13:45
Puoi memorizzare l'ultimo ID usato all'inizio del file.

kalindran
19-09-2013, 14:41
Ok, ma a livello di codice che funzioni devo utilizzare?
diciamo che la struttura è questa


typedef struct{
int id;
char nome[20];
char cognome[20];
} scheda;

FILE *filedata
scheda persona;

Nella mia procedura faccio tipo:


void inserimentodati(void)
{
printf("Nome---> ");
scanf("%s", persona.nome);
printf("Cognome---> ");
scanf("%s", persona.cognome);
filedata=fopen("data.txt","a+");
fwrite(&persona,sizeof(scheda),1,filedata);
fclose(filedata)

Cosa devo aggiungere per avere l'ID progressivo cui facevo riferimento?

oregon
19-09-2013, 14:50
Devi riservare un record, il primo, memorizzando il numero dell'ultimo ID utilizzato (o del primo da utilizzare). In questo modo, ad ogni inserimento, leggerai e aggiornerai questo valore per avere traccia degli ID usati.

kalindran
19-09-2013, 15:05
Che linee di codice dovrei aggiungere? (sono davvero alle prime armi)

oregon
19-09-2013, 15:09
Anche se sei alle prime armi, dovresti tentare tu di scrivere il programma in base alle dritte che ricevi ...

kalindran
19-09-2013, 16:03
Ci sto provando, ma credo mi manchi ancora qualche funzione.
Io riservo il primo record. Ciò significa che nel campo ID del primo record dovrò salvare di volta in volta il mio contatore, giusto?
Vediamo se a livello di ragionamento sto capendo qualcosa. La procedura inserimento la farei in questo modo.

APRI FILE IN LETTURA
SE (FILE NON TROVATO)
{CREA FILE
scheda.id<-- 1
MEMORIZZA scheda.id in una variabile esterna che richiamerò al prossimo inserimento
MEMORIZZA IL RECORD SCHEDA SU FILE
CHIUDI FILE}
ALTRIMENTI
{LEGGI PRIMO RECORD
INCREMENTA scheda.id
MEMORIZZA scheda.id in una variabile esterna che richiamerò al prossimo inserimento
AGGIORNA PRIMO RECORD
CHIUDI FILE}

//procedo con l'inserimento
scheda.id<--- variabilememorizzata
nome...
....
APRO FILE per appendere il RECORD INSERITO
SCRIVO RECORD
CHIUDO IL FILE

Loading