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);
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
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.