Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con el delimitador de un TStringList (https://www.clubdelphi.com/foros/showthread.php?t=60088)

Velia 19-09-2008 13:52:35

Problemas con el delimitador de un TStringList
 
Hola estoy necesitando extraer cadenas de un archivo plano donde el formato es el siguiente

xx|xxxx|xx xxxx xxxxx x|xxx
xx|xxxx|xxxx xxxx xxxx |xxx
xx|xxxx|xxx xxxx xxx |xxx

Y mi código es este

Código Delphi [-]

procedure TfrmImportacion.BitBtn1Click(Sender: TObject);
var
  i, j : Integer;
  cadena : String;
  slFile, slLinea : TStringList;
begin
 slFile := TStringList.Create;
 slLinea := TStringList.Create;
 slLinea.Delimiter:= #124; //Defino el delimitador 

 slFile.LoadFromFile('D:\wpaboent_p14.txt'); //cargo el archivo 
 for i:=0 to slFile.Count-1 do //Lee por línea
 begin
   cadena:='';
   slLinea.DelimitedText:=slFile[i]; 
   for j:=0 to slLinea.Count-1 do   //Lee por delimitador y por espacio en    blanco
   begin
      cadena := cadena+' '+slLinea[j];
      showmessage(cadena);
   end; // end for j
 end;// end for i

El problema es que en vez de leer solamente por delimitador también lee por espacio en blanco, y no sé como hacer para que solo respete el delimitador | = #124

Desde ya agradezco a quien pueda ayudarme
Saludos Velia

seoane 19-09-2008 13:59:26

Dependiendo de la versión de delphi que tengas puedes usar esto:
Código Delphi [-]
slLinea.StrictDelimiter:= TRUE;

coso 19-09-2008 14:03:01

hola, te dejo este link que trato algo parecido.

Caro 19-09-2008 14:08:34

Hola Velia, como te dijeron puedes utilizar STrictDelimiter pero que viene en versiones posteriores a Delphi 7, sino lo tuvieras puedes utilizar la función ExtractString.

Código Delphi [-]
 slFile.LoadFromFile('D:\wpaboent_p14.txt'); //cargo el archivo 
 for i:=0 to slFile.Count-1 do //Lee por línea
 begin
   cadena:='';
   ExtractStrings(['|'], [#32], PCHAR(slFile[i]), slLinea);

   for j:=0 to slLinea.Count-1 do
   begin
      cadena := cadena+' '+slLinea[j];
      showmessage(cadena);
   end; // end for j
 end;// end for i

Saluditos

Velia 19-09-2008 14:48:58

MUchas Gracias
 
Muchas gracias Caro y Coso acabo de solucionar usando la función
function " StringReplace "

Muy agradecida, les mando saludos
Velia

Velia 22-09-2008 13:23:00

Ahora surgio un problema con el ExtractStrings
 
Chicos abusando de su buena predisposición, acudo para que me den una ultima mano (espero:()

Estoy utilizando la función ExtractStrings de esta forma
Código Delphi [-]
ExtractStrings(['|'], [#32], PCHAR(slFile[i]), slLinea);
pero cuando estoy leyendo un archivo plano con este formato x ejemplo

0 1 2 3 4
xxx|xxxx| |xxxx|xxxx
xxx|x xx|xxxx |xxxx|xx
xx|xxxx| |xxxx|


cada vez que quiero leer el contenido de los campos tengo que indicarle la posición y solo cuenta las posiciones que tienen contenido como por ejemplo la primera vez me va a leer la posiciòn 2 = xxxx

Como puedo solucionar esto ya que tengo la versión 7 de delphi y no cuento la función STrictDelimiter ??

Gracias nuevamente

coso 22-09-2008 18:29:43

Hola velia, yo tiraria por lo directo, aunque seguro que hay maneras mas elegantes:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
        sl1, sl2 : TStringList;
        i : integer;
begin
        sl1 := TStringList.Create;
        sl2 := TstringList.Create;
        if not Opendialog1.execute then exit;
        sl1.LoadFromFile(Opendialog1.Filename);
        sl1.text := stringreplace(sl1.text,#32,'-espacio-',[rfIgnorecase,rfReplaceAll]);
        sl1.commatext := stringreplace(sl1.text,#124,', ',[rfIgnorecase,rfReplaceAll]);
        sl2.commatext := sl1.commatext;
        sl2.text := stringreplace(sl1.commatext,'-espacio-',' ',[rfIgnorecase,rfReplaceAll]);
        for i := 0 to sl2.count - 1 do showmessage(sl2[i]);
        sl1.free;
        sl2.free;
end;

lo he hecho a lo rapido, seguro que se puede optimizar. saludos.


La franja horaria es GMT +2. Ahora son las 00:52:28.

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