Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Borrar registros de un archivo de texto (https://www.clubdelphi.com/foros/showthread.php?t=73419)

pato89xd 20-04-2011 01:51:47

Borrar registros de un archivo de texto
 
saludos, estoy tratando de hacer un procedimiento que borre registros de un archivo de texto, la clave de esos registros la tengo en un listbox y los registros son aquellos que comienzen con el tabulador, para eso decidi crear un archivo auxiliar para despues copiar los registros que no quiero borrar al archivo con los registros, el codigo es el siguiente, pero el problema es que al terminar el codigo parece que me cierra el archivo original (F), puesto que si trato de volver a acceder a al me marca ERROR I/O 103, espero me puedan ayudar, gracias =)
Código:

procedure TForm3.Button3Click(Sender: TObject);
var
lineaactual,texto :string;
aux: TextFile;
begin
if (ListBox1.ItemIndex <> -1)  then begin texto := ListBox1.Items[ListBox1.ItemIndex];
ListBox1.Items[ListBox1.ItemIndex] := ''; end;
if (ListBox1.ItemIndex <> -1) and (FileExists( ExtractFilePath( Application.ExeName ) + 'Musica.DATA' )) then
begin
CopyFile( PAnsiChar(ExtractFilePath(Application.ExeName ) + 'Musica.DATA'),PAnsiChar( ExtractFilePath( Application.ExeName ) + 'aux.DATA'), false);
AssignFile( aux, ExtractFilePath( Application.ExeName ) + 'aux.DATA' );
append(aux);
reset(aux);
Rewrite(F);
    while not Eof(aux) do
    begin
      Readln(aux, lineaactual);
      if CompareText(lineaactual, texto)<>0 then
      WriteLn(F,lineaactual);
      if CompareText(lineaactual, texto)=}0 then
      begin
      Readln(aux, lineaactual);
        while (not Eof(aux)) and (lineaactual[1]=chr(9)) do readln(aux,lineaactual);
        Readln(aux, lineaactual);
        end;
        end;
            closefile(aux);
            deletefile(ExtractFilePath( Application.ExeName ) + 'aux.DATA' );
end;
      BuscarGeneros();  //  end
end;


ecfisa 21-04-2011 01:56:32

Hola Pato89xd.

Realmente no logro entender la lógica de tu código.

Pero basandome en lo que queres hacer,
Cita:

estoy tratando de hacer un procedimiento que borre registros de un archivo de texto, la clave de esos registros la tengo en un listbox y los registros son aquellos que comienzen con el tabulador
yo lo haría de este modo:
Código Delphi [-]
procedure QuitarLinea(const NomArch,Patron: string);
var
  LineaActual :string;
  NomOri, NomDes: string;
  Ori,Des: TextFile;
begin
  NomOri:= ExtractFilePath(Application.ExeName)+NomArch;
  NomDes:= ChangeFileExt(NomOri,'')+'.@@@';  // o cualquier extensión extraña...
  AssignFile(Ori, NomOri);
  Reset(Ori);
  AssignFile(Des, NomDes);
  Rewrite(Des);
  while not Eof(Ori) do
  begin
    Readln(Ori, LineaActual);
    if Pos(Patron, LineaActual) = 0 then
      WriteLn(Des, LineaActual);
  end;
  Closefile(Ori);
  CloseFile(Des);
  DeleteFile(NomOri);
  Rename(Des,NomOri);
end;

Llamada de ejemplo:
Código Delphi [-]
  if ListBox1.ItemIndex <> -1 then
  QuitarLinea('Musica.DAT',ListBox1.Items[ListBox1.ItemIndex]);

Saludos.

pato89xd 21-04-2011 08:00:02

Muchas gracias, funciono de maravilla, y para la proxima tratare de estructurar mejor mi codigo para que no resulte tan incoherente para los demas =)


La franja horaria es GMT +2. Ahora son las 09:01:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi