Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Fraccionar contenido de un TEdit (https://www.clubdelphi.com/foros/showthread.php?t=92316)

SaraTorres 27-09-2017 06:53:39

Fraccionar contenido de un TEdit
 
Hola chicos
Soy nueva acá y estoy tratando de aprender programación Delphi.
Por favor les agradecería si me ayudan con lo siguiente.

Mi TEdit contiene la cadena: Jirafa - Elefante - Sapo - Ardilla

Ahora, cómo puedo extraer los 4 nombres de los animales sin el guión, en el TEdit?
Deseo que cada nombre del animal lo muestre un ShowMessage
Gracias por todo

Casimiro Notevi 27-09-2017 09:50:13

¿Y qué llevas hecho?

Neftali [Germán.Estévez] 27-09-2017 15:38:43

Cita:

Empezado por SaraTorres (Mensaje 521345)

Mi TEdit contiene la cadena: Jirafa - Elefante - Sapo - Ardilla

cómo puedo extraer los 4 nombres de los animales sin el guión, en el TEdit?

Yo te diría que utilizaras un for/While para recorrer la cadena.
Puedes utilizar la función Copy (revisa la ayuda) si te hace falta "cortar" un trozo de la cadena para guardarlo en una variable.
También te puede ser útil la función Pos, que te permite encontrar una cadena dentro de otra (por ejemplo pra encontrar los guiones "-").

ecfisa 27-09-2017 16:38:11

Hola.

Y también hallarás otra opcion leyendo sobre la clase TStringList y las funciones ExtractStrings y StringReplace.

Saludos :)

Luis F. Orjuela 27-09-2017 17:26:13

Hazlo así como te paso el ejemplo y te funcionará...

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
 var sl : TStringList;
     i: integer;

begin
    sl := TStringList.Create();
    try
        sl.Delimiter := '-';
        sl.DelimitedText := Edit1.Text;
        for i := 0 to sl.Count - 1 do
          begin
            ShowMessage(sl[i]);
          end;
    finally
        sl.Free();
    end;
end;

Saludos desde Bogotá - Colombia :)

ecfisa 27-09-2017 17:34:21

Bueno, ahora que Luis te allanó el camino :), yo había pensado en algo así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  TS: TStrings;
begin
  TS := TStringList.Create;
  try
    ExtractStrings(['-'], [], PChar(StringReplace(Edit1.Text, ' ', '', [rfReplaceAll])), TS);
    ShowMessage(TS.Text);
  finally
    TS.Free;
  end;
end;

Saludos :)

Casimiro Notevi 27-09-2017 17:39:03

Cita:

Empezado por Luis F. Orjuela (Mensaje 521359)
Hazlo así como te paso el ejemplo y te funcionará...

Se trataba de que aprendiera, y no que haga un copia-pega ;)

movorack 27-09-2017 17:51:39

Código Delphi [-]
ExtractStrings([C_SEPARATOR], [], PChar(StringReplace(aText, ' ', EmptyStr, [rfIgnoreCase, rfReplaceAll])), aList);

TOPX 27-09-2017 21:23:36

Hola.
Código Delphi [-]
var
  Expresion: TRegEx;
  Arreglo: TArray<string>;
  Elemento: String;
const
  Patron = ' - ';
begin
  Expresion := TRegEx.Create(EmptyStr);
  Arreglo := Expresion.Split('Jirafa - Elefante - Sapo - Ardilla', Patron);
  for Elemento in Arreglo do
  begin
    ShowMessage(Elemento);
  end;
end;
-

AgustinOrtu 27-09-2017 21:26:24

Yo usaria las funciones Split:

Código Delphi [-]
uses
  System.Types,
  System.SysUtils,
  System.StrUtils;

var
  Original, Each: string;
  Palabras: TArray<string>;
  MasPalabras: System.Types.TStringDynArray;
begin
  Original := 'Jirafa - Elefante - Sapo - Ardilla';
  Palabras := Original.Split(['-']);
  Writeln('Usando TStringHelper.Split: ');
  Write('Cantidad de palabras: '); Writeln(System.Length(Palabras));
  for Each in Palabras do
    WriteLn(Each);

  WriteLn;
  Writeln('Usando System.StrUtils.SplitString: ');
  MasPalabras := System.StrUtils.SplitString(Original, '-');
  Write('Cantidad de palabras: '); Writeln(System.Length(MasPalabras));
  for Each in MasPalabras do
    WriteLn(Each);

  Readln;
end.

Salida:

Código Delphi [-]
Usando TStringHelper.Split:
Cantidad de palabras: 4
Jirafa
 Elefante
 Sapo
 Ardilla

Usando System.StrUtils.SplitString:
Cantidad de palabras: 4
Jirafa
 Elefante
 Sapo
 Ardilla

Ten en cuenta que no le recorta el espacio al inicio de cada cadena. Para eso podrias usar las funciones Trim


La franja horaria es GMT +2. Ahora son las 22:10:43.

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