27/09/2004

Tirar espaços e trocar por apenas um caracter?

Meu problema é:

var 
texto : string;

begin
texto := ´teste       teste   teste               teste´;
label1.Caption := StringReplace(texto, ´ ´, ´´, [rfReplaceAll&93;);
end;


Com o código acima, o resultado é :
[b:7f094be33f]
testetestetesteteste
[/b:7f094be33f]
OK

Só que eu preciso que ao tirar os espaços, que subistitua por esse caracter -> [b:7f094be33f]|[/b:7f094be33f] Mais se tiver 30, 20 ou 50 espaços, tever tirar todos e colocar apenas um -> [b:7f094be33f]|[/b:7f094be33f]

Como eu faço?


Redoctober

Respostas

27/09/2004

Paulo_amorim

Olá

Não sei se tem um jeito mais automático, mas vc poderia varrer a String trocando o espaço pelo seu caractere com um if antes... ou seja, ele só troca pelo teu caractere se o caractere anterior não for já o seu....

ficaria mais ou menos assim - nesse caso eu troquei teu caractere pelo Chr(9), ou seja, o TAB:

for i := 2 to Length( Texto) do // a primeira posição eh desprezivel
begin
  if (Texto[i&93; = ´ ´) and (Texto&91;i-1&93; <> Chr(9)) then
    Texto&91;i&93; := Chr(9);
end;


Espero que ajude
Até+


Responder Citar

27/09/2004

Aroldo Zanela

Colega,

procedure TForm1.Button1Click(Sender: TObject);
var Texto: String;
begin
  Texto := TrocaEspacos(´teste       teste   teste               teste´);
  ShowMessage(Texto);
end;
function TrocaEspacos(Linha: String): String;
var I, N: SmallInt;
    Delimitar: Boolean;
begin

  N := Length(Linha);

  Result := ´´;

  for i := 1 to N do
  begin
    if (Linha[I&93;=´ ´) and Delimitar then
    begin
      Result      := Result + ´|´;
      Delimitar   := false;
    end else
    if Linha&91;I&93;<>´ ´ then
    begin
      Result      := Result + Linha&91;I&93;;
      Delimitar   := true;
    end;
  end;
end;



Responder Citar