Delphi StringReplace: Como utilizar a função StringReplace no Delphi

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (4)  (0)

Veja nesse artigo um exemplo de uso da função StringReplace no Delphi. A função StringReplace é muito utilizada quando queremos substituir o conteúdo de alguma string na linguagem 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

  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.

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!

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?