Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [delphi] : cancellare una riga di un file

    Salve,
    ho questa procedura per leggere un file e confrontare la linea letta con una stringa e nel caso fossero uguali cancellare la suddetta riga dal file.
    codice:
    VAR
      F:TextFile;
      nomeFile,bcFile,bc:string;
    
    BEGIN
      bc:='BARCODE';
      assignFile(F,nomeFile);
      reset(F);
      while not eof(F) do
      begin
        Readln(F,bcFile);
        if copy(bcFile,1,13)=bc then
        begin
          WriteLn(F,'');
        end;
      end;
      closeFile(F);
    END;
    solo che quando va ad eseguire la Writeln mi da "error I/O", si blocca il ciclo e non cancella la riga!

    come dovrei fare per risolvere il problema?
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  2. #2
    Con "Reset(F)" apri in sola lettura.
    Per salvare un nuovo file usa Rewrite(F).

    Oppura abbandona i File(ereditati dal vecchio pascal) e prova ad utilizzare i "fileStream", oppure più semplicemente le TstringList, che hanno i metodi loadfromfile e savetofile.

    Cmq sull'help trovi esempi x tutti i gusti

    Ciao

  3. #3
    Originariamente inviato da Nikk11
    Con "Reset(F)" apri in sola lettura.
    Per salvare un nuovo file usa Rewrite(F).

    Oppura abbandona i File(ereditati dal vecchio pascal) e prova ad utilizzare i "fileStream", oppure più semplicemente le TstringList, che hanno i metodi loadfromfile e savetofile.

    Cmq sull'help trovi esempi x tutti i gusti

    Ciao
    quale help?

    cmq ora do un'occhiata a questi metodi che mi hai elencato..
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  4. #4
    comunque writeln non sovrascrivveve la riga nel file ma ne scrive una nuova.
    Se vuoi cancellare una riga da un file lo devi riscrivere tutto escludendo quella riga.
    ciao
    sergio

  5. #5
    Originariamente inviato da mondobimbi
    comunque writeln non sovrascrivveve la riga nel file ma ne scrive una nuova.
    Se vuoi cancellare una riga da un file lo devi riscrivere tutto escludendo quella riga.
    ciao
    sergio
    e se io volessi cancellare la riga in tempo reale?
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  6. #6
    ti conviene usare, come ti è stato suggerito, TStringList

    Codice PHP:
    with TStringList.Create do  
      
    begin
      LoadFromFile
    ('tuo_file');

      ....
    // le tue procedure per cancellare ed inserire righe
      
    ....

      
    SaveToFile('tuo_file');
      
    Free;
    end
    ciao
    sergio

  7. #7
    Originariamente inviato da Whitecrowsrain
    quale help?

    cmq ora do un'occhiata a questi metodi che mi hai elencato..
    Quello di delphi

  8. #8
    Originariamente inviato da Nikk11
    Quello di delphi
    pensavo facessi riferimento a questo forum..

    cmq ho trovato.. ora funziona tutto alla perfezione... forte sto TStringList...

    Grazie a tutti
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    La classe TStringList non è sempre lo strumento più adatto, in quanto potrebbe risultare "ingombrante" se il file da elaborare contiene molte righe; in tal caso, conviene eventualmente compiere l'elaborazione in due passi differenti: aprire il file in lettura, leggerlo riga per riga e scrivere in un secondo file tutte le righe che non devono essere rimosse dal primo; al termine dell'operazione, è sufficiente sostituire il file originale con il secondo e il gioco è fatto.

    Nel caso in cui le righe siano sempre in numero tendenzialmente ridotto, TStringList è perfetta.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.