Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Uso del TStringList.Delimiter/DelimitedText (https://www.clubdelphi.com/foros/showthread.php?t=52680)

Walterdf 28-01-2008 15:26:28

Uso del TStringList.Delimiter/DelimitedText
 
Buenas a todos!

Estoy intentando leer un txt para pasarlo a db. Utilizo TStringlist para cargar el archivo que está delimitado por punto y coma. Especifico el Delimiter como ';' pero no me está trayendo la información de manera correcta. Cuando encuentra un espacio tambien lo toma como separador. Probé cambiar el formato del txt estableciendo el delimitador como tabulación y sucede lo mismo.
Doy un ejemplo de 1 línea del archivo txt:

TRANSMISION - DIRECCION - CAJA;ANILLOS DE SINCRONIZADO;ROT;030001;CHEVROLET;CAJA FAE 1RA.;8,92;5.752.540;;;;;;;;;;;;;;;;30001,00

y lo leo en un procedimiento de esta manera:
Código:

var
  TXTFile, fields: TStringList;
  i: Integer;
begin
  TXTFile := TStringList.Create;
  fields := TStringList.Create;
  try
    TXTFile.LoadFromFile('autoparts.txt');
    for i := 0 to TXTFile.Count - 1 do
    begin
      fields.Clear;
      fields.Delimiter := ';';
      fields.QuoteChar := '';
      fields.DelimitedText := CSVFile[i];

  //...demás código para realizar la inserción

Hasta aquí si veo el contenido de fields, sería:
fields[0] : TRANSMISION
fields[1] : -
fields[2] : DIRECCION
fields[3] : -
fields[4] : CAJA
...
y debería ser:
fields[0] : TRANSMISION - DIRECCION - CAJA
fields[1] : ANILLOS DE SINCRONIZADO
fields[2] : ROT
fields[3] : 030001
fields[4] : CHEVROLET
...

Qué estoy haciendo mal?

Desde ya agradezco a quien pueda darme una mano.
Saludos!!

Mick 28-01-2008 19:13:26

No se si ha sido un fallo de transcripcion o realmente en el codigo fuente original esta asi pero esta linea:

fields.DelimitedText := CSVFile[i];

deberia ser

fields.DelimitedText := TXTFile[i];


CSVFile es una variable que no aparece por ningun lado en tu ejemplo salvo ahi !!!!.


Saludos

Walterdf 28-01-2008 19:23:46

Fue solo un error de transcripción.

De todas maneras muchas gracias Mick!!!

Un abrazo

seoane 28-01-2008 20:46:39

En las versiones antiguas de delphi, la Clase TStringList toma como separador, además del que se indica con la propiedad Delimiter, todos los caracteres iguales o inferiores a #32 (el espacio), es decir que los espacios, tabuladores y demás siempre serán utilizados como separadores.

Esto era una característica bastante molesta, que además no tiene ninguna explicación, solo que a los programadores de delphi les pareció buena idea. Menos mal que en las nuevas versiones la clase TStringList cuenta con la propiedad StrictDelimiter, que cuando esta a TRUE fuerza a que solo el carácter indicado por la propiedad Delimiter sea tomado como un separador. Al menos así es al menos en mi versión de Turbo delphi, por lo que supongo que en delphi 2007, y puede que en 2006, ocurrirá lo mismo.

Walterdf 28-01-2008 21:09:17

Vaya problema!
Pensé que estaba metiendo la pata!!, le di vueltas y vueltas al problema y nada...

Muchas gracias seoane por desasnarme!!!!

Veremos como lo solucionamos.

Un abrazo a todos y gracias nuevamente!!!

seoane 28-01-2008 21:17:40

Podrías usar la clase TParser.

Aquí el hilo donde me desasnaron a mi ;) , y me enseñaron la clase TParser

http://www.clubdelphi.com/foros/showthread.php?t=38818

Walterdf 29-01-2008 00:57:16

Excelente sugerencia, no conocía esa clase!!
Mil gracias!!

Un abrazo.


La franja horaria es GMT +2. Ahora son las 22:02:03.

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