Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   eliminar cadena en listbox (https://www.clubdelphi.com/foros/showthread.php?t=72103)

ZayDun 27-01-2011 20:47:05

eliminar cadena en listbox
 
Hola, estoy trabajando con un listbox el cual carga un fichero de texto y me muestra algo asi...

uno@novale
dos@4w4
tres@%$%

me gustaria saber como puedo recorrer todo el listbox y que me elimine el contenido que muestra apartir de "@" para que muestre tan solo

uno
dos
tres

espero que se haya entendido.. un saludo

roman 27-01-2011 22:06:45

El ListBox lo recorres con un ciclo for:

Código Delphi [-]
for I := 0 to ListBox1.Items.Count - 1 do
begin
  // aquí accedes a la línea actual con ListBox1.Items[i]
end;

Para cada línea usas la función Pos para encontrar la posición de la arroba y luego la función Copy para extraer la parte de la cadena desde el principio hasta una posición antes de la encontrada.

// Saludos

ZayDun 28-01-2011 02:00:04

gracias roman por tu respuesta, he logrado hacerlo correr, pero el proceso es muy lento al ser un documento de texto de varios Mb.Dejo un ejemplo del codigo que uso actualmente.

Código Delphi [-]
var
i:integer;
linea:integer;
Info:string;
begin
  for linea := 0 to Lista.Items.Count -1 do
  begin
    Info:=Lista.Items[linea];
    i := Pos('@', Info);
    Delete(Info, i, MaxInt);
    Lista.Items[linea] := Info;
  end;

ecfisa 31-01-2011 01:08:05

Hola ZayDun.

Se podría optimizar el procedimiento haciendo que sólo se asigne el nuevo texto cuando se encuentra la ocurrencia buscada.
Otra cosa que puede aligerar un poco el tiempo es trabajar sobre un TStrings y luego asignar el resultado al TListBox.

Ejemplo:
Código Delphi [-]
...
procedure TForm1.Button1Click(Sender: TObject);
var
  i, p: Integer;
  aux: string;
  TS: TStrings;
begin
  TS:= TStringList.Create;
  try
    TS.LoadFromFile('C:\TU_ARCHIVO.TXT');
    for i:= 0 to TS.Count -1 do
    begin
      p := Pos('@', TS[i]);
      if p > 0 then
      begin
        aux:= TS[i];
        Delete(aux, p, MaxInt);
        TS[i]:= aux;
      end;
    end;
    ListBox1.Items.Assign(TS);
  finally
    TS.Free;
  end;
end;
...


Un saludo.


La franja horaria es GMT +2. Ahora son las 16:37:28.

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