Página 1 de 1

[Delphi7] Split by xNeoDarkx

Publicado: 19 Nov 2011, 03:26
por orlando9427
Les traigo esta función clasica en VB6 pero por desgracia inexistente en Delphi, hasta donde yo se; la función tiene una unidad de la que depende y de un tipo que se especificaran dentro del código, fue probada con delimitadores de 1-10 caracteres sin problemas, mas alla de eso me dio pereza probarlo.

El codigo
[syntax="delphi"]
interface
uses ..., StrUtils;

type
TArray = array of String;
...

implementation

...

function Split(sChar, sDel: String): TArray;
var lSize, lLen, lLoop, lArray, lDel : Integer;
aTemp: TArray;
begin
{Iniciamos todas nuestras variables numericas}
lArray := 0; lLen := 0;
lSize := Length(sChar);
lDel := Length(sDel);

{Obtenemos la longitud de nuestro array final}
for lLoop := 1 to lSize do begin
if MidStr(sChar, lLoop, lDel) = sDel then lLen := lLen + 1;
end;
{Lo asignamos}
SetLength(aTemp, lLen + 1);

lLoop := 1;
repeat
if MidStr(sChar, lLoop, lDel) <> sDel then begin
aTemp[lArray] := aTemp[lArray] + sChar[lLoop];
Inc(lLoop); {Vamos llenando letra por letra cada indice}
end else begin lInc(lArray); Inc(lLoop, lDel); end; {Nos saltamos los delimitadores y seguimos con otro indice}
Application.ProcessMessages; {Procesamos mensajes para no colgar el programa}
until (lLoop = lSize + 1);
Result := aTemp; {Retornamos la matriz}
end;[/syntax]

Y un ejemplo de uso sería
[syntax="delphi"]
procedure TForm1.sButton1Click(Sender: TObject);
var lLoop: Integer;
taTemp: TArray;
begin
taTemp := Split(sEdit1.Text, sEdit2.Text);
for lLoop := 0 to Length(taTemp) - 1 do begin
sListBox1.AddItem(taTemp[lLoop], nil);
end;
end;[/syntax]
Siendo sEdit1.Text = "Estoffesffunaffprueba" y sEdit2.Text = "ff"

Nos devolvería en la matriz taTemp = ("Esto", "es", "una", "prueba")

Saludos y comenten