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

11 de novembro de 2015 0 Por Ramos de Souza Janones
Powered by Rock Convert

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.

Curso completo de Games, inclusive Realidade Aumentada.Powered by Rock Convert

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!

Ah, se gostou deste artigo, vai adorar este livro:

Livro do curso: Marketing para Empresas e Profissonas de Software

capalivro

Esta obra tem como objetivo levar o leitor a pensar sobre todas as estratégias de mercado a fim de se destacar da concorrência no setor de software, aumentando suas chances de vendas. 

Em todos os capítulos do livro há estudos de casos, conteúdos complementares e dicas de ferramentas que tornam a obra completa, levando o leitor a uma reflexão de todo seu negócio e tornando-o competitivo e lucrativo.

Mais sobre o livro….

Este artigo foi originalmente publicado

 

Curso de Inglês para Programadores.Powered by Rock Convert

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.
LEIA TAMBÉM:  Qual a diferença entre uma linguagem de programação estática e dinâmica?