How to break a string

4

I want to break a string in the old Delphi (Pre-Embarcadero). I would love to be able to do something like this:

function Quebra (input: String; separador: String) : Array of String
var resultado: Array of String
begin
    resultado := input.Split(separador);
    return resultado;
end;

But apparently the Split method did not exist in heroic times.

I searched Google and in our matrix . But I did not find any answer civilly short, ie: I would not want to have brush bits just to do something that should be so simple and that other languages had decades before Delphi. Is it possible?

    
asked by anonymous 03.03.2015 / 14:49

2 answers

4

Something like this?

function Quebra (input: String; separador: String) : TStringList
var resultado: TStringList
begin
    resultado := TStringList.Create;
    resultado.Delimiter := separador;
    resultado.DelimitedText := input;
    return resultado;
end;

Source: link

    
03.03.2015 / 15:33
3

In case you want to use an array containing String's, you can also use it in the following way, if you want:

Type
  aStrings = Array Of String; // Utilize um Tipo de Matriz para Parâmetros de Rotinas

...

Procedure Quebra( Input: String; Separador: Char; Var ListString: AStrings );
Var
   Resultado: TStringList;
   idLst: Integer;
Begin
   // Previne que exista elementos maiores que Resultado.Count
   // uma vez que se trata de variável externa.
   SetLength( ListString, 0 );

   Resultado := TStringList.Create;
   Try
      // Utilizada apenas um caractere como delimitador
      Resultado.Delimiter := Separador;
      Resultado.DelimitedText := Input;

      // Define novo tamanho para a matriz
      SetLength( ListString, Resultado.Count );

      For idLst := 0 To Pred( Resultado.Count ) Do
         ListString[ idLst ] := Resultado[ idLst ];
   Finally
      Resultado.Free;
   End;

End;

OR

Procedure Quebra( Input: String; Separador: String; Var ListString: AStrings );
Var
   Resultado: TStringList;
   idLst: Integer;
Begin
   // Previne que exista elementos maiores que Resultado.Count
   // uma vez que se trata de variável externa.
   SetLength( ListString, 0 );

   Resultado := TStringList.Create;
   Try
      // Possibilita que seja utilizada uma sequencia de caracteres como delimitador
      Resultado.Text := StringReplace( Input, Separador, #13#10, [ rfReplaceAll ] );

      // Define novo tamanho para a matriz
      SetLength( ListString, Resultado.Count );

      For idLst := 0 To Pred( Resultado.Count ) Do
         ListString[ idLst ] := Resultado[ idLst ];
   Finally
      Resultado.Free;
   End;

End;

As for the usage, it looks like this:

Var
   aTexto: aStrings;
Begin
   Quebra( 'Como quebrar uma string', ' ', aTexto );
   //aTexto[ 0 ] = 'Como'
   //aTexto[ 1 ] = 'quebrar'
   //aTexto[ 2 ] = 'uma'
   //aTexto[ 3 ] = 'string'
End;
    
05.03.2015 / 15:16