DesFormatar String
Caros colegas, como faço para tirar a formatação de uma string por exemplo: uma string de cpf cpf:=´01.123.456/0001-40´ transformar em ´01123456000140´
Dede ja agradeço.
Lucas.
Dede ja agradeço.
Lucas.
Lucas_rp
Curtidas 0
Respostas
Lucas Silva
12/11/2003
Acredito que a máscara do seu campo deve estar assim
´99\.999\.999\/9999\-99;1;_´... se for isso mesmo é só trocar a máscara p/ ´99\.999\.999\/9999\-99;0;_´...
se não resolver vc me dá o toque que tem outros jeitos....
´99\.999\.999\/9999\-99;1;_´... se for isso mesmo é só trocar a máscara p/ ´99\.999\.999\/9999\-99;0;_´...
se não resolver vc me dá o toque que tem outros jeitos....
GOSTEI 0
Lucas_rp
12/11/2003
Na verdade não estou usando maskedit, no arquivo ja esta gravado com a formatação então eu iria pegar o conteudo numa var do tipo string e depois eu ia tentar desformatar. Ex.:
cpf := tbcliente.fieldbyname(´cpf´).asstring;
//aqui o conteudo da cpf é ´01.123.456/0001-40´
agora que eu iria tentar desformatar, mas não sei como.
Lucas.
cpf := tbcliente.fieldbyname(´cpf´).asstring;
//aqui o conteudo da cpf é ´01.123.456/0001-40´
agora que eu iria tentar desformatar, mas não sei como.
Lucas.
GOSTEI 0
Cebikyn
12/11/2003
Pode usar o seguinte código:
var x : integer; str: String; begin // Edit1 contém o texto formatado: str := Edit1.Text; while Pos(´.´, Str) <> 0 do begin X := Pos(´.´, Str); Delete(Str, X, 1); end; while Pos(´-´, Str) <> 0 do begin X := Pos(´-´, Str); Delete(Str, X, 1); end; while Pos(´/´, Str) <> 0 do begin X := Pos(´/´, Str); Delete(Str, X, 1); end; // Edit2 conterá o texto sem formatação: Edit2.Text := Str; end;
GOSTEI 0
Carlos Bernardo
12/11/2003
Você pode criar essa função:
function DeleteChar(const Ch: Char; const S: string): string;
var
Posicao: integer;
begin
Result := S;
Posicao := Pos(Ch, Result);
while Posicao > 0 do begin
Delete(Result, Posicao, 1);
Posicao := Pos(Ch, Result);
end;
end;
e depois é só usá-la assim :
Edit1.Text := DeleteChar(´-´,Edit1.Text);
Edit1.Text := DeleteChar(´.´,Edit1.Text);
Edit1.Text := DeleteChar(´/´,Edit1.Text);
function DeleteChar(const Ch: Char; const S: string): string;
var
Posicao: integer;
begin
Result := S;
Posicao := Pos(Ch, Result);
while Posicao > 0 do begin
Delete(Result, Posicao, 1);
Posicao := Pos(Ch, Result);
end;
end;
e depois é só usá-la assim :
Edit1.Text := DeleteChar(´-´,Edit1.Text);
Edit1.Text := DeleteChar(´.´,Edit1.Text);
Edit1.Text := DeleteChar(´/´,Edit1.Text);
GOSTEI 0
Carlosrm
12/11/2003
lucas_rp
Só para aumentar as opções, vai mais uma:
procedure.....
var
I : Integer;
s : string;
begin
cpf := ´01.234.567/0001-89´;
s := emptystr;
for I := 1 to length(cpf) do
if (cpf[I] in [´0´..´9´]) then
s := s + cpf[I];
cpf := s; // ´01234567000189´
end;
abraço. carlosrm :wink:
Só para aumentar as opções, vai mais uma:
procedure.....
var
I : Integer;
s : string;
begin
cpf := ´01.234.567/0001-89´;
s := emptystr;
for I := 1 to length(cpf) do
if (cpf[I] in [´0´..´9´]) then
s := s + cpf[I];
cpf := s; // ´01234567000189´
end;
abraço. carlosrm :wink:
GOSTEI 0
Beppe
12/11/2003
Putz, abriu concurso de funções? Então aí vai a minha:
function UnformatString(const S: String): String; function UnformatBuffer(Dest, Source: PChar; Len: Integer): Integer; asm push ebx push eax jmp @Check @Loop: mov bl, [edx] inc edx cmp bl, ´0´ jb @Skip cmp bl, ´9´ ja @Skip mov [eax], bl inc eax @Skip: @Check: dec ecx jns @Loop pop edx sub eax, edx pop ebx end; begin SetLength(Result, Length(S)); SetLength(Result, UnformatBuffer(Pointer(Result), Pointer(S), Length(S))); end;
GOSTEI 0
Cabelo
12/11/2003
Aqui vai uma mais simples e mais rápida.
Com a mesma variável string que vc usa, faça assim
cpf := stringreplace(tbcliente.fieldbyname(´cpf´).asstring, ´.´, ´´, [rfReplaceAll]);
cpf := stringreplace(tbcliente.fieldbyname(´cpf´).asstring, ´/´, ´´, [rfReplaceAll]);
cpf := stringreplace(tbcliente.fieldbyname(´cpf´).asstring, ´-´, ´´, [rfReplaceAll]);
vai que dá certo, é mais rápido, pois utiliza uma função do Delphi.
Sem mais
Cabelo 8)
Com a mesma variável string que vc usa, faça assim
cpf := stringreplace(tbcliente.fieldbyname(´cpf´).asstring, ´.´, ´´, [rfReplaceAll]);
cpf := stringreplace(tbcliente.fieldbyname(´cpf´).asstring, ´/´, ´´, [rfReplaceAll]);
cpf := stringreplace(tbcliente.fieldbyname(´cpf´).asstring, ´-´, ´´, [rfReplaceAll]);
vai que dá certo, é mais rápido, pois utiliza uma função do Delphi.
Sem mais
Cabelo 8)
GOSTEI 0
Beppe
12/11/2003
vai que dá certo, é mais rápido, pois utiliza uma função do Delphi.
Isto não quer dizer nada. E isso pode ser mais rápido de digitar, mas em runtime é pelo menos umas 50 vezes mais lenta que a minha(eu acho que é isso que importa).
GOSTEI 0
Host
12/11/2003
O Ataliba tem razão!!
GOSTEI 0