Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Separación de un string (https://www.clubdelphi.com/foros/showthread.php?t=88460)

xdelph 09-06-2015 13:11:36

Separación de un string
 
Mi problema es que quiero guardar a partir de un string, unos valores en variables de modo que:

linea es el string y contiene : "1|aaaaaa|2000|Juan Pérez"

Yo necesito guardar en variables el 2000 y "Juan Pérez"
Como puedo hacerlo?
Gracias de antemano!

Casimiro Notevi 09-06-2015 13:17:32

Es muy sencillo, además existen muchísimas formas de hacerlo, unas muy simples y otras más elaboradas.
¿Cómo has pensado hacerlo? ¿qué código has probado? ¿has buscado por los foros?
Por cierto, bienvenido a clubdelphi, no olvides leer nuestra guía de estilo, gracias :)

xdelph 09-06-2015 13:19:48

Pues la verdad no tenía mucha idea, soy casi nuevo en Delphi
Mi idea era utilizar pos() y a partir de ahí sacarlo. Me puedes decir como?
Un saludo!

Casimiro Notevi 09-06-2015 13:25:36

Es una buena idea, además te servirá para ir aprendiendo sobre el manejo de cadenas de texto.
A ver, haz un intento y muestra tu código.

xdelph 09-06-2015 14:07:12

La verdad había probado, pero he borrado porque no me funcionaba y ahora mismo estoy algo agobiado con esto.
El problema que yo tenía es que solo podía leer a partir del primer |

jhonny 09-06-2015 16:09:32

Apuesto a que la función ExtractString te ha de servir para lograr tu objetivo.

Casimiro Notevi 09-06-2015 16:50:49

Con lo comentado por jhonny puedes buscar en los foros:
ejemplo 1, ejemplo 2

AgustinOrtu 09-06-2015 19:56:20

Hola xdelph

Te recomiendo revises estos enlaces:

Operaciones con cadenas de texto (I)
Operaciones con cadenas de texto (II)
Operaciones con cadenas de texto (III)
Operaciones con cadenas de texto (IV)
Operaciones con cadenas de texto (y V)

Tambien esto:
Tipos de variable para el manejo de caracteres

Cortesia del blog Delphi al Límite

nlsgarcia 09-06-2015 21:31:31

xdelph,

Cita:

Empezado por xdelph
...linea es el string y contiene : "1|aaaaaa|2000|Juan Pérez"...necesito guardar en variables el 2000 y "Juan Pérez"...soy casi nuevo en Delphi...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StrUtils;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   Source : String;
   S1, S2, AuxStr : String;
   SL : TStringList;
   i : Integer;
   P : Integer;
   MsgUsr, MsgApp : String;

begin

   // Obtener '2000' y 'Juan Pérez' de Source

   Source := '1|aaaaaa|2000|Juan Pérez';

   // Método-1

   SL := TStringList.Create;

   ExtractStrings(['|'],[],PChar(Source),SL);

   P := SL.IndexOf('2000');
   if P <> - 1 then
      S1 := SL[P];

   P := SL.IndexOf('Juan Pérez');
   if P <> - 1 then
      S2 := SL[P];

   MsgApp := 'Método 1 (ExtractStrings-IndexOf)';
   MsgUsr := Format('S1 = %s y S2 = %s',[S1,S2]);

   MessageBox(Handle, PChar(MsgUsr), PChar(MsgApp), MB_OK + MB_ICONINFORMATION);

   SL.Free;

   // Método-2

   S1 := EmptyStr;
   S2 := EmptyStr;
   i := 1;

   repeat

      P := PosEx('|', Source,i);

      if P <> 0 then
      begin

         AuxStr := Copy(Source,i,P-i);

         if (AuxStr = '2000') then
            S1 := AuxStr;

         if (AuxStr = 'Juan Pérez') then
            S2 := AuxStr;

         i := P+1;

      end
      else
      begin

         AuxStr := Copy(Source,i,MaxInt);

         if (AuxStr = '2000') then
            S1 := AuxStr;

         if (AuxStr = 'Juan Pérez') then
            S2 := AuxStr;

      end;

   until (P = 0);

   MsgApp := 'Método 2 (PosEX-Copy)';
   MsgUsr := Format('S1 = %s y S2 = %s',[S1,S2]);

   MessageBox(Handle, PChar(MsgUsr), PChar(MsgApp), MB_OK + MB_ICONINFORMATION);

   // Método-3

   S1 := EmptyStr;
   S2 := EmptyStr;

   SL := TStringList.Create;

   ExtractStrings(['|'],[],PChar(Source),SL);

   for i := 0 to SL.Count - 1 do
   begin

      if SL[i] = '2000' then
         S1 := SL[i];

      if SL[i] = 'Juan Pérez' then
         S2 := SL[i];

      if (S1 <> EmptyStr) and (S2 <> EmptyStr) then
         Break;

   end;

   MsgApp := 'Método 3 (ExtractStrings-Count)';
   MsgUsr := Format('S1 = %s y S2 = %s',[S1,S2]);

   MessageBox(Handle, PChar(MsgUsr), PChar(MsgApp), MB_OK + MB_ICONINFORMATION);

   // Método-4

   S1 := EmptyStr;
   S2 := EmptyStr;
   i := 1;

   for P := 1 to Length(Source) do
   begin

      if Source[P] = '|' then
      begin

         AuxStr := Copy(Source,i,P-i);

         if (AuxStr = '2000') then
            S1 := AuxStr;

         if (AuxStr = 'Juan Pérez') then
            S2 := AuxStr;

         i := P + 1;

      end;

   end;

   AuxStr := Copy(Source,i,MaxInt);

   if (AuxStr = '2000') then
      S1 := AuxStr;

   if (AuxStr = 'Juan Pérez') then
      S2 := AuxStr;

   MsgApp := 'Método 4 (String-Length)';
   MsgUsr := Format('S1 = %s y S2 = %s',[S1,S2]);

   MessageBox(Handle, PChar(MsgUsr), PChar(MsgApp), MB_OK + MB_ICONINFORMATION);

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Ejemplifica la extracción de substrings de un String por 4 diferentes métodos, como se muestra en la siguiente imagen:



Notas:

1- El código propuesto tiene como único objetivo, servir de guía a los requerimientos planteados en el Msg #1.

2- Es importante que estudies los métodos propuestos y hagas pruebas con los mismos para internalizar los conceptos, programar se aprende programando.

Revisa esta información:
Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 05:30:16.

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