Delphi StringReplace: Como utilizar a função StringReplace

Delphi StringReplace: Como utilizar a função StringReplace

11 de novembro de 2015 0 Por Ramos de Souza Janones

A função StringReplace é muito utilizada quando queremos substituir o conteúdo de alguma string na linguagem de programação Delphi.

Em muitos casos precisamos fazer a substituição de determinadas frases, palavras, ou até mesmo um único char numa cadeia de caracteres (string, por exemplo). No Delphi temos uma função para fazer essa tal substituição: a função StringRepalce.

Declaração da função StringReplace:

function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

Localização:

Unit SysUtils;

Imagine que você está fazendo um sistema de integração e chegou num ponto onde será necessário trocar uma determinada palavra em todo o arquivo. Vamos construir um exemplo para ficar mais usual. Criaremos um TStringList e uma procedure para preencher o mesmo, como mostra a Listagem 1.

Listagem 1. Criando um TStringList

Evento gratuito de tecnologia: inscreva-se na 3ª edição do Dev Summit:

  1. Vem ai a 3ª edição do maior evento hands-on de desenvolvimento de software do Brasil. Vamos apresentar tecnologias, ferramentas e práticas em mais de 20 horas em sessões ao vivo com profissionais de referência em Full Stack, Flutter, Angular, React e muito mais.
  2.  



      unit Unit1;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs;
       
      type
        TForm1 = class(TForm)
        private
       
        public
          pLista: TStringList;
          procedure CarregarStringList;
        end;
       
      var
        Form1: TForm1;
       
      implementation
       
      {$R *.dfm}
       
      procedure TForm1.CarregarStringList;
      begin
       
      end;
         
      end. 

    Iremos agora implementar o conteúdo de nossa lista. Para isso, vá até o método CarregarLista, e implemente o seguinte código da Listagem 2.

    Leia:

     

    Listagem 2. Incrementando o método CarregarLista

    procedure TForm1.CarregarStringList;
    begin
      if not Assigned(pLista) then
        pLista := TStringList.Create;
    
      pLista.Clear;
      pLista.Add('WESLEY YAMAZACK   219900000   LINGUAGEM: DelpHi');
      pLista.Add('HUGO CARDOSO  218800000   LINGUAGEM: Java');
      pLista.Add('FELIPE PEREIRA    217700000   LINGUAGEM: DelpHi');
      pLista.Add('ERICK CARLOS  217700000   LINGUAGEM: PL/SQL');
      pLista.Add('MARCOS CARDOSO    217700000   LINGUAGEM: DelpHi');
      pLista.Add('JOAO PIRES    216600000   LINGUAGEM: C#');
      pLista.Add('JULIO CARLOS  215500000   LINGUAGEM: Java');
    end;

    Seguindo com o nosso exemplo, precisaremos agora substituir onde aparece Linguagem: 1, para Linguagem: Delphi. Adicione um TButton em seu formulário e no evento onClick deste implemente o código da Listagem 3.

    Listagem 3. Adicionando TButton

      procedure TForm1.Button1Click(Sender: TObject);
      var
        lNovoConteudo: String;
      begin
        CarregarStringList;
        lNovoConteudo := StringReplace(pLista.Text, 'DelpHi', 'Delphi', [rfReplaceAll, rfIgnoreCase]);
        ShowMessage( lNovoConteudo  );
      end;

    Com essa rotina, todo o conteúdo ‘DelpHi’ de nossa lista pLista, será trocado por ‘Delphi’, como mostrado a seguir:

    WESLEY YAMAZACK  219900000   LINGUAGEM: 3
    HUGO CARDOSO    218800000   LINGUAGEM: 2
    FELIPE PEREIRA  217700000   LINGUAGEM: Delphi
    ERICK CARLOS    217700000   LINGUAGEM: Delphi
    MARCOS CARDOSO  217700000   LINGUAGEM: Delphi
    JOAO PIRES  216600000   LINGUAGEM: 3
    JULIO CARLOS    215500000   LINGUAGEM: 2

    Porém, vocês podem ficar curiosos e se perguntarem o que é: rfReplaceAll e rfIgnoreCase? Vamos à explicação.

    rfReplaceAll – quer dizer que você gostaria de substituir todas as incidências do conteúdo ‘DelpHi’. Caso você não o informe, será substituído apenas a primeira incidência de ‘DelpHi’, ficando desta forma:

    WESLEY YAMAZACK  219900000   LINGUAGEM: Delphi
    HUGO CARDOSO    218800000   LINGUAGEM: Java
    FELIPE PEREIRA  217700000   LINGUAGEM: DelpHi
    ERICK CARLOS    217700000   LINGUAGEM: PL/SQL
    MARCOS CARDOSO  217700000   LINGUAGEM: DelpHi
    JOAO PIRES  216600000   LINGUAGEM: C#
    JULIO CARLOS    215500000   LINGUAGEM: Java

    rfIgnoreCase – quer dizer que você não gostaria de se preocupar com os caracteres case sensitive, ou seja, a ou A é a mesma coisa, caso você não o informe, só será substituído o conteúdo escrito de forma 100% igual, logo, DelpHi é diferente de Delphi e o conteúdo não será modificado. Vamos fazer um teste implementando o código da Listagem 4.

    Listagem 4. Tratando com o case sensitive

      procedure TForm1.Button1Click(Sender: TObject);
      var
        lNovoConteudo: String;
      begin
        CarregarStringList;
        lNovoConteudo := StringReplace(pLista.Text, 'DELPHI', 'Delphi', []);
        ShowMessage( lNovoConteudo  );
      end;

    Em nenhum momento na nossa pLista o conteúdo foi escrito ‘DELPHI’. Neste caso nada irá acontecer com o nosso conteúdo. Para que funcione, basta adicionar o parâmetro rfIgnoreCase, e você terá o conteúdo modificado, como mostrado na Listagem 5.

    Listagem 5. Trabalhando com o parâmetro rfIgnoreCase

      procedure TForm1.Button1Click(Sender: TObject);
      var
        lNovoConteudo: String;
      begin
        CarregarStringList;
        lNovoConteudo := StringReplace(pLista.Text, 'DELPHI', 'Delphi', [rfIgnoreCase]);
        ShowMessage( lNovoConteudo  );
      end;

    Com isso, podemos fazer modificações em qualquer conteúdo usando ou não caracteres case sensitive, trocando apenas a primeira ou todas as incidências de uma palavra.

    Bons códigos!

     

    LEIA TAMBÉM: 

    Você está na seção:   » Programação » Delphi 
    votes
    Article Rating

    LEIA TAMBÉM:  Aprenda Delphi para Android e iOS de graça (ou quase)

    E-Zine Ramos da Informática

    * indicates required

    View previous campaigns.