Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-07-2013
avechuche avechuche is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 23
Poder: 0
avechuche Va por buen camino
Parsear texto con TString

Hola gente que tal, soy nuevo por aca y estoy necesitando un poco de ayuda. Resulta que abro un archivo de texto y lo leo linea por linea con un While. Esas lineas tienen dos partes divididas por la barra "|", osea Texto1|Texto2, yo tengo que parsear ese texo para que me quede
Texto1
Texto2
El problema es el siguiente, el parseo lo hago asi
Código Delphi [-]
arrayColumnas := TStringList.Create;
arrayColumnas.Text := S;
arrayColumnas.StrictDelimiter := True;
arrayColumnas.Delimiter := '|';
arrayColumnas.DelimitedText := arrayColumnas.Text;
Donde "S" es cada linea del '.txt'.

El problema viene que me toma el salto de linea del final de la linea.
arrayColumnas[0] = Texto1 + ¿Un salto de linea? no se que onda
arrayColumnas[1] = Texto2 + ¿Un salto de linea? no se que onda


Use un ShowMessage con comillas para ver que cosa rara habia y me sale lo siguiente. Si el texto es asi 5|Gonzalo me muestra
"5
"
"Gonzalo
"

Las comillas tendrian que ir al final y no en la linea siguiente
Hay alguna forma de que no me tome ese salto de linea?
Gracias!

Última edición por Casimiro Notevi fecha: 04-07-2013 a las 02:19:50.
Responder Con Cita
  #2  
Antiguo 04-07-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 04-07-2013
avechuche avechuche is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 23
Poder: 0
avechuche Va por buen camino
Si disculpa, me olvide, pero no lo puedo editar ahora
Responder Con Cita
  #4  
Antiguo 04-07-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por avechuche Ver Mensaje
Si disculpa, me olvide, pero no lo puedo editar ahora
No te preocupes, es sólo para que lo tengas en cuenta para futuros mensajes
Responder Con Cita
  #5  
Antiguo 04-07-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola avechuche.

Creo que en este caso es mas simple usar la función ExtractStrings.

Como ejemplo:
Código Delphi [-]
...
var
  i  : Integer;
begin
  with TStringList.Create do
  try
    LoadFromFile('ARCHIVO.TXT');
    for i:= 0 to Count-1 do
    begin
      ExtractStrings(['|'], [], PChar(Strings[i]), ListBox1.Items);
      ListBox1.Items.Add('---------------'); // a fin de resaltar el resultado
    end;
  finally
    Free;
  end;
end;

Pero, por si te interesa, aquí hay otras alternativas: funcion split de una cadena

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 04-07-2013
avechuche avechuche is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 23
Poder: 0
avechuche Va por buen camino
Gracias ecfisa, funciona perfectamente. Ahora viene otra duda (Soy muy nuevo en esto)
Yo no lo quiero poner en un ListBox, quiero poner esos dos valores en cada columna de mi listbox
Hice lo siguiente

Creo el TStringList antes de entrar al "While" que recorre el ".txt"

Código Delphi [-]
arrayColumnas := TStringList.Create
Llamo a la funcion
Código Delphi [-]
ExtractStrings(['|'], [], PChar(S), arrayColumnas)
// Donde "S" es cada linea del ".txt" y arrayColumnas es del tipo TStringList.

Después recorro "arrayColumnas" y agrego los valores correspondientes a las columnas de mi ListView.
El problema esta que siempre me agrega la primer linea del ".txt" al ListView. Si tengo un ".txt" asi

1|Gonzalo
2|Pedro
3|Sofia


El ListView me devuelve

1|Gonzalo
1|Gonzalo
1|Gonzalo


Tengo que hacer esto
Código Delphi [-]
arrayColumnas := TStringList.Create
dentro del While asi resetea arrayColumnas ?

Osea lo hice y anda perfecto, pero está bien aplicado? porque me da que esta mal crear el TStringList cada vez que cambio la linea.
Responder Con Cita
  #7  
Antiguo 04-07-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por avechuche Ver Mensaje
Tengo que hacer esto
Código Delphi [-]
arrayColumnas := TStringList.Create
dentro del While asi resetea arrayColumnas ?

Osea lo hice y anda perfecto, pero está bien aplicado? porque me da que esta mal crear el TStringList cada vez que cambio la linea.
Hola avechuche.

Si creas y liberas el stream cada vez, no tendría que haber problemas. Mejor tal vez sea crearlo antes del ciclo while, vaciarlo con el método Clear y liberarlo despues.

Algo como:
Código Delphi [-]
  stream := TStringList.Create; // crear
  try
    while (...) do
    begin
      //... 
      stream.Clear   //<== vaciar
    end
  finally
    stream.Free  // liberar
  end;

También te podrías ahorrar todo el tema de leer el archivo recorriéndolo con while si usas el método LoadFromFile de TStrings. De ese modo podes acceder a cada línea del archivo mediante el índice.

Pero siendote sincero, no alcanzo a entender claramente como deseas que queden las líneas leidas desde el archivo en el stream.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿como parsear texto? JXJ Varios 9 31-08-2010 22:31:02
parsear xml + clase DOMParser gustavoh JAVA 0 27-07-2006 15:39:25
Duda Tstring wildnetboy C++ Builder 9 16-06-2006 21:19:46
Convertir un TString a PWideChar bustio OOP 3 01-10-2004 04:50:16
TString en los caption buitrago Varios 3 14-08-2004 19:54:13


La franja horaria es GMT +2. Ahora son las 17:22:39.


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
Copyright 1996-2007 Club Delphi