PDA

Visualizza la versione completa : [C] - cancellare riga da file dato un nome


jonnyforever
13-01-2012, 17:46
ciao a tutti amici!! come faccio a cancellare una riga di un file,dato un cognome da tastiera,che ad esempio contiene appunto nome-cognome-indirizzo-telefono (gestione ribrica).? io ho provato cosi



case 'togliere':
{
printf("persona da togliere:");
scanf("%s",cognomex);
if(strcmp(info.cognome,cognomex)==0)
}
fprintf(fp2,"%s-%s-%s-%d-%s",info.nome,info.cognome,info.indirizzo,&info.telefono,info.nota);

GRAZIE A TUTTI!!!

ramy89
13-01-2012, 18:40
La fprintf è una funzione di scrittura su stream, non penso sia possibile cancellare parti del file.
Ti tocca memorizzarti da qualche parte quale stringhe copiare, aprire il file in scrittura e riscriverlo.

Rising1
14-01-2012, 18:07
se si apre il file come "r+" però si può fare credo.
con seek() si arriva alla riga che si vuole cancellare e poi si scrive da li una stringa formata solo da spazi fino a fine riga, dovrebbe sovrascriverla.


/*presupponendo che sei già arrivato ad inizio riga*/
while (getc(tuofile)!="\n") {putc(' ',tuofile)}

ma aspetto conferma da qualcuno, anch'io sono alle prime armi :stordita:

oregon
14-01-2012, 18:10
Sovrascrivere con spazi è una cosa, cancellare (eliminare) dal file è un'altra ...

Rising1
14-01-2012, 20:06
giustamente...

se però si vuole che il puntatore non appena arrivi a questa riga vuota salti a quella successiva si può mettere all'inizio un "\n" o non cambierebbe niente?

oregon
14-01-2012, 20:14
Non cambierebbe il fatto che lui vuole eliminare i dati non cambiarli ...!

Per eliminare fisicamente i dati da un file sequenziale di testo, si deve scrivere un altro file ricopiando i dati che si vogliono conservare, eliminare l'originale e rinominare il nuovo file.

jonnyforever
14-01-2012, 20:15
si ok, ma io intendevo che se cerco una parola in una riga di un file, si eliminasse l intera riga di quel file riscrivendo le nuove righe(tranne quella in un altro file)!! :D

oregon
14-01-2012, 20:18
Originariamente inviato da jonnyforever
si ok, ma io intendevo che se cerco una parola in una riga di un file, si eliminasse l intera riga di quel file riscrivendo le nuove righe(tranne quella in un altro file)!! :D

Ecco e quindi rileggi l'ultimo mio post ...

P.S. Per quanto riguarda il codice che hai mostrato

case 'togliere':

ti consiglio di studiare nuovamente sul tuo libro l'istruzione switch() ...

ramy89
14-01-2012, 20:44
Al limite puoi metterci un contrassegno, tipo un "#" per indicare che quella riga non va letta.
Oppure ti tocca memorizzarti da qualche parte quale stringhe copiare, aprire il file in scrittura e riscriverli.

jonnyforever
15-01-2012, 11:47
il caso switch me lo sto studiando per bene perchè facendo una selezione dichiarandola con una printf che mi permette di sceglere "togliere" seleziona la parola(cognome) però in termini di codice poi come riscrivo lo stesso file senza quella riga? tutto qui è il problema!! Grazie :-)

Loading