un delimitador, un reemplazador(opciónal) y el objeto TStringList.
Tiene 3 usos:
[+] Devolver todo el texto completo.
[+] Devolver toda el texto en indices.
[+] Reemplazar/Eliminar los delimitadores.
Código:
procedure
ArachniSlit(SWORD, Delim, Inject:String; StrOutputArray:TStringList);
var
i,
LenWord,
M : Integer;
_Cpy : String;
begin
ASM
XOR EAX, EAX
MOV DWORD PTR SS:[LenWord], EAX
END;
SWORD:= COPY(SWORD, 0, length(SWORD))+(Delim);
for i:=1 to length(SWORD) do
begin
if (pos(Delim[1], SWORD[i])<>0) THEN
begin
ASM
MOV EAX, EBX
SUB EAX, DWORD PTR SS:[LenWord]
MOV DWORD PTR SS:[M], EAX
END;
if (LenWord<>0) then
begin
_Cpy:= COPY(SWORD, M, LenWord);
if (Inject>'') then
Insert(Inject, _Cpy, LenWord+1);
StrOutputArray.Append(_Cpy);
end;
ASM
XOR EAX, EAX
MOV DWORD PTR SS:[LenWord], EAX
END;
end
else if (pos(Delim[1], SWORD[i])<>1) THEN
begin
ASM
INC LenWord
END;
end;
end;
end;
Ejemplo 1 - Devuelve toda la lista y elimina los delimitadores.
var
sWord : String;
TStrArray : TStringlist;
begin
TStrArray:= TStringList.Create;
sWord:= '|palabra|texto|hola|chau|OTRO_TEXTO|';
ArachniSlit(sWord, '|', '', TStrArray);
WriteLn( TStrArray.GetText );
TStrArray.Free;
ReadLn;
end.
Ejemplo 2 - Devuelve toda la lista y la remplaza el delimitador '|' por el '&'.
ArachniSlit(sWord, '|', '&', TStrArray);
WriteLn( TStrArray.GetText );
Ejemplo 3 - Devuelve el indice 2 de la lista y elimina los delimitadores.
ArachniSlit(sWord, '|', '', TStrArray);
WriteLn( TStrArray.Strings[2] );