Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2009
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 16
radge Va por buen camino
Como separar una cadena con un delimitador

Buenas uso delphi 5 y no he encontrado la forma de separar una cadena en varias mediante un limitador , ya que tengo un fichero que "importo" que tiene esta estructura

'campo1','campo2',..... y me gustaria solo leer algunos campos del fichero de texto , claro esta delimitando por el delimitador de la coma ","

alguna sugerencia ?

salu2 radge
Responder Con Cita
  #2  
Antiguo 25-11-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,

prueba esto

Código Delphi [-]
var
   s1,s2 : TStringList;
   i : integer;
begin
   s1 := TStringList.Create;
   s1.LoadFromFile('c:\archivo.txt');
 
   s2 := TStringList.Create;
   s2.CommaText := s1.Text;
 
   for i := 0 to s2.Count - 1 do ShowMessage(s2[i]);
end;

Lo hago de cabeza. La idea es cargar en commatext el archivo, y el stringlist ya separa los elementos automaticamente. Un saludo.
Responder Con Cita
  #3  
Antiguo 25-11-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El único problema con la propuesta de coso es que, por lo menos hasta la versión 7 de Delphi, la propiedad CommaText siempre considera los espacios como delimitadores, de forma que si tu archivo tiene una linea como esta:

84,camisas limpias,340.50,sucursal oriente

te lo separará así:

84
camisas
limpias
340.5
sucursal
oriente

Una posible solución a eso, es sustituir previamente los espacios por algún caracter que no se use en el archivo, y restaurarlos una vez asignado a CommaText, por ejemplo:

Código Delphi [-]
procedure Split(S: String; Lines: TStrings);
begin
  S := StringReplace(S, ' ', '~', [rfReplaceAll]);
  Lines.CommaText := S;
  Lines.Text := StringReplace(Lines.Text, '~', ' ', [rfReplaceAll]);
end;

// Saludos
Responder Con Cita
  #4  
Antiguo 25-11-2009
gerardus gerardus is offline
Miembro
 
Registrado: dic 2007
Posts: 43
Poder: 0
gerardus Va por buen camino
Otra opción es usar ExtractStrings, que si respeta los blancos y permite especificar cual es el separador y cuales son los espacios en blanco

Código:
uses Classes;

var
    lCampos : TStringList;
    i: integer;
    Registro: string;
begin
    Registro := '12346; A B C D E; 25/11/2009'
    lCampos := TStringList.Create;
    ExtractStrings([';'], [' '], PChar(Registro), lCampos);
    // En el TStringList lCampos tenemos cada uno de los campos de la cadena de caracteres.
    for i := 0 to lCampos.Count-1 do
      ShowMessage(lCampos[i]);
end;
Saludos,

Gerard.

Última edición por gerardus fecha: 25-11-2009 a las 20:51:53.
Responder Con Cita
  #5  
Antiguo 25-11-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Ah! Esta función está mucho mejor, no la conocía. Gracias gerardus.

// Saludos
Responder Con Cita
  #6  
Antiguo 25-11-2009
gerardus gerardus is offline
Miembro
 
Registrado: dic 2007
Posts: 43
Poder: 0
gerardus Va por buen camino
Yo la encontré despues de deseperarme durante un buen rato con un TStringList de D7 que dejó de funcionar el día en que hubo blancos en uno de los campos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Cambiar delimitador decimal peccatum Tablas planas 5 01-04-2009 18:55:41
Como separar los reportes de la aplicacion? Carlos Arevalo Impresión 4 21-04-2008 17:52:04
Separar cadena de numeros cyborgve Impresión 1 16-05-2007 07:37:31
como separar la fecha ddd_ddd Varios 1 23-10-2005 20:18:47
Como separar las barras de una grafica hook Varios 0 17-06-2004 19:28:34


La franja horaria es GMT +2. Ahora son las 10:40: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