Delphi: Remover espaços extras de uma string

Código de exemplo para você que precisa remover de uma string espaços extras, como espaços duplos, por exemplo.

function RetirarEspacosExtras(var psTexto: string): string;
var
  nCont, nTamanhoDoTexto: integer;
begin
  // A função Length vai retornar o tamanho total da string do
  //parâmetro sTexto e atribuir à variável nTamanhoDoTexto
  nTamanhoDoTexto := Length(psTexto);

  // Aqui será realizado um laço de repetições até atingir o tamanho
  // total de caracteres da string. Faz-se necessário o uso de
  // laços, pois a função StringReplace ao encontrar o primeiro
  // espaço duplo, vai trocar para apenas 1 e sairá do método
  for nCont := 0 to nTamanhoDoTexto - 1 do
    psTexto := StringReplace(psTexto, '  ', ' ', [rfReplaceAll]);
 
  result := psTexto;
end;

5 comentários:

  1. Exemplo de como usar deixaria a postagem mais completa.

    ResponderExcluir
    Respostas
    1. Claudio, boa tarde.
      Está incorreto mesmo o método, mas eu estou achando que é o Blogger que está desconsiderando 2 espaços no 2º parâmetro.
      Até no primeiro comentário que tentei fazer ele removeu e acabei apagando.

      Para corrigir esse problema no método, coloque no 2º parâmetro do StringReplace 2 espaços ao invés de 1.
      O terceiro continua com 1 espaço.

      Vou ajustar na publicação o método.
      Obrigado pelo comentário.

      Excluir
  2. Agora funcionou como o esperado.
    No evento KeyPress do edit declarei a variável s como string, atribui a ela o valor do edit. Aí a função funcionou, porém voltando para o início da string, más o SelStart resolveu, ficou assim.
    var
    s:string;
    begin
    s:= Edit1.Text;
    Edit1.Text:= RetirarEspacosExtras(s);
    Edit1.SelStart:= Length(s);
    end;

    ResponderExcluir
    Respostas
    1. Que bom que deu certo, Claudio.
      Obrigado por compartilhar a sua solução. ;)

      Excluir
  3. Outra coisa legal que eu achei que poderia melhorar a função, é colocar no final da função
    A função trim ou trimLeft

    result:= trimLeft(psTexto);

    Eu dei uns espaços no início da frase, e retirou ou espaços em excesso, más deixou um, então assim ele tira todos os espaços a esquerda, ficou legal.

    ResponderExcluir