Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con StringList y espacios (https://www.clubdelphi.com/foros/showthread.php?t=85810)

jars 08-05-2014 23:33:34

Problema con StringList y espacios
 
Hola amigos.
Tengo el siguiente problema:
Desde un servidor recibo un string con el siguiente formato:
p.ej. 'Nombre=Federico Salvador,DNI=23232323' Esta es cortita pero vienen mas largas.
Al intentar usar StringList del siguiente modo:
Código Delphi [-]
  parms := 'Nombre=Federico Salvador,DNI=23232323' ;
...

  sl: TStringList.Create;
  sl.CommaText := parms;

En sl en lugar de 2 elementos tengo 3 porque me separa
1 Nombre=Federico
2 Salvador
3 DNI=23232323

Hay alguna forma de solucionar esto?

Gracias

nlsgarcia 09-05-2014 00:49:32

jars,

Cita:

Empezado por jars
...recibo un string...'Nombre=Federico Salvador,DNI=23232323'...en lugar de 2 elementos tengo 3...¿Hay alguna forma de solucionar esto?...

Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   SL : TStringList;
   S1 : String;
   i : Integer;

begin

   S1 := 'Name1= FirstName1 LastName1,DNI=1,Name2= FirstName2 LastName2,DNI=2';

   SL := TStringList.Create;

   ExtractStrings([','],[],PChar(S1),SL);

   for i := 0 to SL.Count - 1 do
      ShowMessage(SL[i]);

   SL.Free;

end;
El código anterior en Delphi 7 bajo Windows 7 Professional x32, separa una variable string en sus partes componentes usando como delimitador el carácter ',' y muestra cada uno de los elementos individualmente.

Espero sea útil :)

Nelson.

jars 09-05-2014 15:08:09

Gracias Nelson, es lo que necesitaba.
Abrazo

dec 09-05-2014 15:55:11

Hola,

Por añadir otra opción, al menos a partir de Delphi 2007, existe la propiedad "StrictDelimiter" en "TStrings", que solventa el "problema de los espacios en blanco". Es decir que esto:

Código Delphi [-]
const
  SOURCE_TEXT = 'Nombre=Federico Salvador,DNI=23232323';
var
  s: string;
  t: TStrings;
begin
  t := TStringList.Create();
  try
    t.StrictDelimiter := true;
    t.CommaText := SOURCE_TEXT;
    for s in t do
    begin
      ShowMessage(s);
    end;
  finally
    t.Free();
  end;
end;

Mostrará en sendos mensajes:

Código:

Nombre=Federico Salvador
DNI=23232323

Tal como esperas.


La franja horaria es GMT +2. Ahora son las 15:35:45.

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