Newsgroup: it.comp.lang.pascal
Titolo: Eliminare un record da un file

Innanzitutto salve a tutti.
Vi spiego la mia situazione:
ho un file che contiene dei record; i record sono costituiti da 2 campi: un
intero e una matrice di booleani 80x25.
Vorrei sapere come posso eliminare uno di questi record
dopo averlo individuato nel file.
Avevo pensato di creare un secondo file, copiarvi i record che mi
interessavano tranne quello da cancellare, riscrivere il primo file e
copiarvi il contenuto del secondo file ma mi sembra un po' troppo laborioso
e poi non so come cancellare il secondo file...
Cosa posso fare?
Grazie
--
KNOWLEDGE IS POWER

e poi non so come cancellare il secondo file...
Io ho sempre fatto cosi' ...
<=- Negus -=>
www.infinito.it/utenti/negus80
 ... pascal, c++, asm

 <=- Negus -=>
Farò anche io in questo modo però mi resta sempre un file in + nella
cartella! Con un rewrite lo riduco a 0k di dimensione ma preferirei
eliminarlo! Ho provato con la procedura ERASE dopo aver chiuso il file ma
non viene cancellato. Come devo fare per eliminarlo?
Grazie ancora per l'aiuto.

               Attenzione all'anti-spam XXX
"Le rispedisco questa nota, invece che il suo documento, perche' esso (il suo
documento) attualmente occupa il fondo della mia gabbia per uccelli."
		-- Professore Inglese [o di Inglese?], Providence College

non viene cancellato. Come devo fare per eliminarlo?
Usi Erase semplicemente in questo modo:
**************
Var f:file;
Begin
Assign(f, 'miofile.txt');
Erase(f);
End.
****************


 Grazie
Usi il turbo pascal Borland?
Procedure EliminaRecord (NumeroDaEliminare:Integer; NomeFile:string)
    type TMioRecord =record
        Intero:integer;
        Resto:array[1..80,1..25] of boolean;
        end;
    var
        f1,f2:file of TMioRecord;
        VMioRecord:TMioRecord;
        k:LongInt;
    Begin
    k:=-1
    assign(f1,NomeFile);
    reset(f1);
    assign(f2,NomeFile);
    reset(f2);
    repeat
        read(f1,VMioRecord);
        inc(k);
    until  VMioRecord.Intero=NumeroDaEliminare;
    seek(f2,k);
    repeat
        read(F1,VMioRecord);
        if VMioRecord.Intero<>NumeroDaEliminare then write(f2,VMioRecord);
    until eof(f1);
    close(f1);
    truncate(f2);
    close(f2);
    end;
Tratti lo stesso file con due variabili diverse.
Il primo ciclo Repeat serve ad evitare di ricoprire i records validi con se
stessi.
Punti la seconda variabile file al primo valore da eliminare.
Nel secondo ciclo Repeat leggi con la prima variabile e scrivi con la
seconda variabile.
Il puntatore al file della seconda variabile s'incrementa solo se ci sta un
record da conservare.
La procedura Truncate taglia la seconda variabile file alla posizione del
cursore eliminando i record che si trovano dopo di esso.
Ciao
Nicola Francesco Orsatti

 e poi non so come cancellare il secondo file...
Cosi' puo' andare :
dopo aver copiato tutti i record tranne quello da rimuovere
cancella il primo file: DELETE(primofile) dove primofile : file of
tuo_record;
e rinomina il secondo: RENAME (secondofile,'NOMEFILE');
Per eseguire entrambe le operazioni i file devono essere assegnati
ma non aperti.
Bye,
  > Umberto the Dragon <


Allora se ho capito bene devi cancellare un record da un file e non vuoi
riscrivere
tutti il file per cancellare il record ?
1) Aggiungi al record un campo del tipo boolean che setti a true se il
record viene
    cancellato, quando ricerchi i record fai il test su questa flag per
vedere se il
    recod che stai considerato č cancellato o no !
    es.: metti che devi stampare
    procedure stampa(nomefile);
       while not (eof(nomefile))
           read(nomefile,rec)
           if rec=false then writeln(rec)
   (il codice č in pascal like ossia un non č operativo cosě come č scritto)
  Ti starai chiedendo : poi il file diveta troppo grande e pieno di record
inutili ?!?
  Basta creare una procedura che chiami alla fine del programma che
controlla se i
  record cancellati sono di piů in confronto a quelli presenti e quindi
riscrive il file
  considerando solo quelli non cancellati .
2) il vecchio file lo cancelli con erase(f) e rinomini il file nuovo se vuoi
che abbia un nome standar.
Questo tipo di procedura di cancellazione e utilizzata dal clipper 5.+ ed č
molto efficace. Se devi creare DB utilizzalo ti semplifica la vita.
Re di Cuori
mirc #portici
icq 74961604