How to break a string

Asked

Viewed 5,857 times

4

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

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 method Split did not exist in heroic times.

I Googled it and at our headquarters. But I didn’t find any civilized short answer, i.e.: I wouldn’t want to have to brushing bits just to do something that should be so simple and that other languages had decades before Delphi. It is possible?

2 answers

4


Something like that?

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

Source: http://www.delphibasics.co.uk/RTL.asp?Name=TStringList

3

In case you want to use an array containing String’s, you can also use it as follows, 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 use, it stays 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;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.