Thursday, 22 January 2009

Creando una función Implode /Explode igual que en PHP

Los que tocamos PHP, podemos ver las carencias que a veces tiene Delphi. En este caso hay unas funciones muy útiles para tratar cadenas, serian Implode y Explode.
Cadena = "1,2,3,4,5,6" -> Explode -> devuelve una array con [1],[2],[3],[4],[5],[6]
array = [1],[2],[3],[4],[5],[6] -> Implode -> devuelve un string "1,2,3,4,5,6"

En los 2 casos, hay que indicar el carácter separador, en este caso es una coma.

En delphi he hecho estas pequeñas funciones que nos ayudaran a utilizar estas funciones de una manera cómoda y fácil.



function Implode(const Separador: string; const sArray: TStringArray): string;
var
i: Integer;
sTexto : string;
begin
sTexto := '';
for i := 0 to Length(sArray) - 1 do
begin
sTexto := sTexto + Separador + sArray[i];
end;
Delete(sTexto, 1, Length(Separador));
result := sTexto;
end;

function Explode(const Separador, texto: string): TStringArray;
var
i: Integer;
S: string;
sArray : TStringArray;
begin
S := texto;
SetLength(sArray, 0);
while AnsiPos(Separador, S) > 0 do
begin
i := Length(sArray);
SetLength(sArray, i + 1);
sArray[i] := Copy(S, 1, Pos(Separador, S) - 1);
S := Copy(S, Pos(Separador, S) + Length(Separador), Length(S));
end;
i := Length(sArray);
SetLength(sArray, i + 1);
sArray[i] := Copy(S, 1, Length(S));
result := sArray;
end;


Un ejemplo sería:




2 comments:

  1. Me parece interesante, voy a ponerlo en un hilo de Delphiaccess para ver que piensan sobre estas funciones.

    ReplyDelete
  2. Seguramente ya estara obsoleto, hay otras maneras de hacerlo con funciones del propio entorno.
    Gracias

    ReplyDelete