Hola muchachos..

Os cedo esta versión de Split un poco diferente a las habituales formas de separar datos.

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:

Código: Seleccionar todo

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;
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:

Código: Seleccionar todo

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); //
       //   ...     ...     ...     ...     //
       ///////////////////////////////////////

[COLOR="#00FF00"]{Código agregado->}[/COLOR][COLOR="#FF0000"]ShowMessage(TextoSplitted);[/COLOR] 

      end;
  end;
end;

//Código de un simple botón:
procedure TForm1.Button1Click(Sender: TObject);
begin
SplitAndDo('EstoSeríaOmitidoPorSerElStubMarranaCubanasPutaMarranaZorraMarranaPerraMarranaGuarraAsquerosa','Marrana');
end;
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.

Bueno, si hay dudas preguntad xD.

Saludos!
UDTools.net
GitHub: https://github.com/MetalUDT
Responder

Volver a “Fuentes”