PDA

Ver la Versión Completa : Fraccionar contenido de un TEdit


SaraTorres
27-09-2017, 06:53:39
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
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 (http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Declarations_and_Statements_(Delphi)#Control_Loops) para recorrer la cadena.
Puedes utilizar la función Copy (http://docwiki.embarcadero.com/Libraries/Seattle/en/System.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 (http://docwiki.embarcadero.com/Libraries/Seattle/en/System.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 (http://www.delphibasics.co.uk/RTL.asp?Name=tstringlist) y las funciones ExtractStrings (http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Classes.ExtractStrings) y StringReplace (http://www.delphibasics.co.uk/RTL.asp?Name=stringreplace).

Saludos :)

Luis F. Orjuela
27-09-2017, 17:26:13
Hazlo así como te paso el ejemplo y te funcionará...


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í:


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
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
ExtractStrings([C_SEPARATOR], [], PChar(StringReplace(aText, ' ', EmptyStr, [rfIgnoreCase, rfReplaceAll])), aList);

TOPX
27-09-2017, 21:23:36
Hola.
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:


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:

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