13 Years of Service
40%
Esta función es muy útil para hacer binders "infinitos", simplemente separa los datos entre cadenas y posteriormente hacemos con todos los resultantes lo que queramos, ojo, con todos, no con unos una cosa y con otros otra.. es decir, las funciones que pongas en procedimiento se aplicará a todos los resultados obtenidos del split. Útil también en crypters simples que solo almacenen el encriptado tras un delimitador.
Vamos a la práctica para que se entienda..
Código principal:
Bien, aunque ya dejo comentado dónde insertar código para tratar cada resultado del split, vamos a verlo con un simple ShowMessage:
Código alterado para que muestre un mensaje conteniendo cada string resultante del split:
El resultante al hacer click al botón sería (mensajes):
Primer ShowMessage: CubanasPuta
Segundo ShowMessage: Zorra
Tercer ShowMessage: Perra
Cuarto ShowMessage: GuarraAsquerosa
En el caso de un Binder/Joiner, simplemente escribiríamos a disco cada string (suntituyendo el ShowMessage por una función que escriba a disco) y agregaríamos por ejemplo el ShellExecute (Lo pondríamos debajo del ShowMessage en el procedimiento), etc etc. Al ejecutar el fichero final con los bindeados, se ejecutarán todos.
Vamos a la práctica para que se entienda..
Código principal:
Code:
>Procedure SplitAndDo(Texto, Delimitador:string);
var
LongStr, LongPos: Integer;
TextoSplitted: string;
begin
if Texto = '' then Exit;
if Delimitador = '' then Exit;
while Longpos <> 0 do
begin
while Texto <> '' do
begin
LongStr:= Length(Texto);
LongPos:= Pos(delimitador, texto);
Texto:= Copy(Texto,Longpos + Length(Delimitador), LongStr - LongPos);
if Length(Texto) = 0 then exit;
if Pos(Delimitador,Texto) <> 0 then
TextoSplitted:= Copy(Texto,0,Pos(Delimitador,Texto) - 1)
else
TextoSplitted:= Texto;
///////////////////////////////////////
// Inserta el código aquí //
// Ej.: ShowMessage(TextoSplitted); //
// DecryptAndExecute(TextoSplitted); //
// ... ... ... ... //
///////////////////////////////////////
end;
end;
end;
Código alterado para que muestre un mensaje conteniendo cada string resultante del split:
Code:
>Procedure SplitAndDo(Texto, Delimitador:string);
var
LongStr, LongPos: Integer;
TextoSplitted: string;
begin
if Texto = '' then Exit;
if Delimitador = '' then Exit;
while Longpos <> 0 do
begin
while Texto <> '' do
begin
LongStr:= Length(Texto);
LongPos:= Pos(delimitador, texto);
Texto:= Copy(Texto,Longpos + Length(Delimitador), LongStr - LongPos);
if Length(Texto) = 0 then exit;
if Pos(Delimitador,Texto) <> 0 then
TextoSplitted:= Copy(Texto,0,Pos(Delimitador,Texto) - 1)
else
TextoSplitted:= Texto;
///////////////////////////////////////
// Inserta el código aquí //
// Ej.: ShowMessage(TextoSplitted); //
// DecryptAndExecute(TextoSplitted); //
// ... ... ... ... //
///////////////////////////////////////
{Código agregado->}ShowMessage(TextoSplitted);
end;
end;
end;
//Código de un simple botón:
procedure TForm1.Button1Click(Sender: TObject);
begin
SplitAndDo('EstoSeríaOmitidoPorSerElStubMarranaCubanasPutaMarranaZorraMarranaPerraMarranaGuarraAsquerosa','Marrana');
end;
Primer ShowMessage: CubanasPuta
Segundo ShowMessage: Zorra
Tercer ShowMessage: Perra
Cuarto ShowMessage: GuarraAsquerosa
En el caso de un Binder/Joiner, simplemente escribiríamos a disco cada string (suntituyendo el ShowMessage por una función que escriba a disco) y agregaríamos por ejemplo el ShellExecute (Lo pondríamos debajo del ShowMessage en el procedimiento), etc etc. Al ejecutar el fichero final con los bindeados, se ejecutarán todos.