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.

A declaração da função StringReplace, localizada na Unit SysUtils pode ser feita da seguinte forma:

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

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.


  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. 
Listagem 1. Criando um TStringList

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

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;
Listagem 2. Incrementando o método CarregarLista

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.


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

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 a seguir:
    
      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 4.


  procedure TForm1.Button1Click(Sender: TObject);
  var
    lNovoConteudo: String;
  begin
    CarregarStringList;
    lNovoConteudo := StringReplace(pLista.Text, 'DELPHI', 'Delphi', [rfIgnoreCase]);
    ShowMessage( lNovoConteudo  );
  end;
Listagem 4. Trabalhando com o parâmetro rfIgnoreCase

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.

Saiba mais sobre Delphi ;)

  • Programador Delphi:
    Neste guia de estudos você encontra os conteúdos que precisará para se tornar um programador Delphi completo. Confira a sequência de cursos e exemplos que te guiarão do básico ao avançado em Delphi.
  • Nota fiscal eletrônica na prática:
    A Nota Fiscal Eletrônica consiste de um arquivo XML, o qual é preenchido com os dados de uma movimentação de mercadoria ou serviço, assinado digitalmente e enviado para a SEFAZ do estado no qual o contribuinte reside.