Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Retirar Caracter de um edit


Eder

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0
Tenho este conteudo em um edit:
Marcos+Dias+Peixoto+da+Silva
eu gostaria de saber como faço um codigo que retira este sinal de mais(+) deixando assim:

Marcos Dias Peixoto da Silva
Eder, você pode fazer uso da function StringReplace, que postei ainda outro dia para você neste post

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Oba..Micheus.

é esta aqui né:

function StringReplace(S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
var
  Idx,
  Offset :Integer;
  S_Case,
  OldPattern_Case: string;
begin
  if rfIgnoreCase in Flags then
  begin
    S_Case := UpperCase(S);
    OldPattern_Case := UpperCase(OldPattern);
  end else
  begin
    S_Case := S;
    OldPattern_Case := OldPattern;
  end;
  Idx := Pos(OldPattern_Case, S_Case);
  Offset := Idx;
  if Idx > 0 then
  repeat
    Delete(S, Offset, Length(OldPattern));
    Insert(NewPattern, S, Offset);
    Delete(S_Case, 1, Idx);
    Idx := Pos(OldPattern_Case, S_Case);
    Offset := Offset +Length(NewPattern)+ Idx -1;
  until not(rfReplaceAll in Flags) or
        ((Idx = 0) and (rfReplaceAll in Flags));
  Result := S;
end;

Porem não compreendi ela.....por isto não sei por onde começar.... :blush:

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Eder... vai um mais simples

procedure TForm1.Button1Click(Sender: TObject);
var S: string;
begin
  S := 'Marcos+Dias+Peixoto+da+Silva';
  while Pos('+', S) > 0 do
    S[Pos('+', S)] := ' ';

  edit1.Text := s;
end;

abraço

Editado por Jhonas
Link para o comentário
Compartilhar em outros sites

  • 0
Porem não compreendi ela.....por isto não sei por onde começar.... :blush:
É faltou um exemplo junto dela. Mas se você olhar uns 2 posts abaixo tem um exemplo de como você iria utilizá-la.

Ela faz basicamente o mesmo que a do Delphi7 faz. Caso você use o Delphi7 ou superior, basta incluir a unit SysUtils - não precisa escrever o código.

Delphi syntax:

type TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);

function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

Retorna a string modificada

S = Sua string de entrada a ser alterada

OldPattern = Padrão antigo, ou seja, o que você quer procurar para substituir

NewPattern = Novo padrão, ou seja, o texto a substituir o antigo

Flags = pode ser um ou a combinação das duas opções.

- rfReplaceAll = substitui todas as ocorrências. Omitido, substitui apenas a primeira

- rfIgnoreCase = ignora diferenciação entre maiúsculas e minúsculas. Omitido, faz a busca pelo texto exata.

Pegando um gancho no exemplo do Jhonas, seu uso seria ssim:

S := 'Marcos+Dias+Peixoto+da+Silva';
S := StringReplace(S, '+', ' ', [rfReplaceAll])

vai um mais simples
É mais simples, mas serve especificamente para este caso. Também troca apenas caracter, não seqüência de texto.

Acho sempre mais interessante usar algo abrangente, que possa ser utilizado em outros casos e flexível. E quando vier a migrar para Delphi7, basta remover a procedure de sua unit de utilidades - porque não mudará nada no código onde ela for utilizada.

Fica a seu critério.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Resumindo:

Dica do Jonas:

procedure TForm1.Button2Click(Sender: TObject);
var S: string;
begin
  S := EditEndereco.text;
  while Pos('+', S) > 0 do
    S[Pos('+', S)] := ' ';
  EditEndereco.Text := S;
  end;
R.: beleza.. Dica do Micheus: Função:
function StringReplace(S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
var
  Idx,
  Offset :Integer;
  S_Case,
  OldPattern_Case: string;
begin
  if rfIgnoreCase in Flags then
  begin
    S_Case := UpperCase(S);
    OldPattern_Case := UpperCase(OldPattern);
  end else
  begin
    S_Case := S;
    OldPattern_Case := OldPattern;
  end;
  Idx := Pos(OldPattern_Case, S_Case);
  Offset := Idx;
  if Idx > 0 then
  repeat
    Delete(S, Offset, Length(OldPattern));
    Insert(NewPattern, S, Offset);
    Delete(S_Case, 1, Idx);
    Idx := Pos(OldPattern_Case, S_Case);
    Offset := Offset +Length(NewPattern)+ Idx -1;
  until not(rfReplaceAll in Flags) or
        ((Idx = 0) and (rfReplaceAll in Flags));
  Result := S;
end;
(+)mais Codigo do botão:
procedure TForm1.Button3Click(Sender: TObject);
var S: string;
begin
S := EditEndereco.text;
S := StringReplace(S, '+', ' ', [rfReplaceAll]);
EditEndereco.text:=S;
end;

R.: beleza...também

Dicas testadas usando Delphi 4

valeu..Pessoal testei as duas e realmente ambas funcionam muito bem.

muito Obrigado a todos

Abraço

:)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...