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.