Adicionar zero a esquerda!

Delphi

08/04/2003

[b:52e3bd0ae7]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:52e3bd0ae7]


Anonymous

Anonymous

Curtidas 0

Melhor post

Wellington Telles

Wellington Telles

11/04/2017

var
   Numero: Integer;
begin
   Numero:= 123;
   Edit1.text:= Format('%5.5d',[Numero]); // resulta '00123';
end;


Solução simples e rápida
GOSTEI 1

Mais Respostas

Afischer

Afischer

08/04/2003

Caro delphiano

Tenho uma função para campos string. Se ajudar em alguma coisa, aí vai ela:

function ZeroLeft(vZero: string; vQtd: integer): string;
var
i, vTam: integer;
vAux: string;

begin

vAux := vZero;
vTam := length( vZero );
vZero := ´´;
for i := 1 to vQtd - vTam do
vZero := ´0´ + vZero;
vAux := vZero + vAux;
result := vAux;

end;

André Fischer


GOSTEI 0
Marcelo

Marcelo

08/04/2003

[quote:2dc7a1bb79=´Luis Rodrigo´][b:2dc7a1bb79]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:2dc7a1bb79][/quote:2dc7a1bb79]

Vode pode usar assim:

var
i:string;
begin
fmtstr:=(i,´¬.6d´,[strtoint(edit1.text)]);{6 é o numeor de casas vc quer}
edit1.text:=i;{edit1.text é o campo onde esta o numero a ser formatado}
end;

Valeu?
at+...


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

08/04/2003

[quote:08b3c0291c=´Luis Rodrigo´][b:08b3c0291c]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:08b3c0291c][/quote:08b3c0291c]

Luis,

Como o campo é numérico, ele vai gravar da forma que está fazendo atualmente, ou seja, sem os zeros à esquerda. Para conseguir o efetio que você deseja (gravar com zeros), teria que alterar o campo para algum tipo caracter.
Eu acredito que o melhor a se fazer e manter da forma que está e utilizar alguma função para [b:08b3c0291c]exibir com zeros a esquerda[/b:08b3c0291c].

function StrZero(iNumero, iComp: Integer): String;
begin
  Result := StringOfChar(´0´,iComp-Length(IntToStr(iNumero)))+IntToStr(iNumero);
end;



GOSTEI 0
Anonymous

Anonymous

08/04/2003

Faça como o Aroldo Zanela falou ou use o seu campo mesmo e configure o DisplayLabel para ´000000´.


GOSTEI 0
Jeová Soares

Jeová Soares

08/04/2003

Outra forma é:
Mantenha o campo como está e utilize a segunte instrução:

label1.caption := formatfloat(´#00000´,campo1.value);

ou

edit1.text := formatfloat(´00000´,campo1.value);


GOSTEI 0
Dor_poa

Dor_poa

08/04/2003

Existem várias formas. Vejamos uma:

function tbStrZero(const I: integer; const Casas: byte): string;
var
Ch: Char;
begin
Result := IntToStr(I);
if Length(Result) > Casas then
begin
Ch := ´*´;
Result := ´´;
end
else Ch := ´0´;
while Length(Result) < Casas do Result := Ch + Result;
end;

Exemplo de como usá-la:

var
S: string;
Numero: integer;
{...}
begin
{...}
S := tbStrZero(Numero, 6);
{...}
end;


Ou Ate mesmo:
Edit1.Text := FormatFloat(´000000´,StrToFloat(Edit1.Text));


Observações: Se o comprimento desejado (Casas) não for suficiente para conter o número, serão colocados asteriscos.


GOSTEI 0
Singular Ti

Singular Ti

08/04/2003

Eu fiz uma assim:

function PreencheZero(variavel:string; quant,posicao:integer):String;
var
  i,tamanho:integer;
  aux: string;
begin
  aux := Variavel;
  tamanho := length(Variavel);
  Variavel := ;
  for i:=1 to quant-tamanho do Variavel := Variavel + 0;
  if Posicao = 2 then aux := aux + Variavel; // esquerda
  if Posicao = 1 then aux := Variavel + aux; // direita
  Result := aux;
end;


Abraços!!
GOSTEI 0
Thiago Schnell

Thiago Schnell

08/04/2003

Fiz uma também !

function zerosaesquerda(s:string; quant:byte):string;
begin
 for quant:=quant downto 1 do
 begin
  SetLength(s,succ(length(s)));
  Move(s[1],s[2],succ(length(s))* sizeof(char));
  s[1]:=0;
 end;
 result:=s
end;
GOSTEI 0
Marco Salles

Marco Salles

08/04/2003

Muitos caminhos levam a roma . Há muitas formas ate mesmo utilizando Expressões Regulares . Mas particularmente dou preferencia sempre a utilizar a VCL e a StringOfChar na minha concepção é a que melhor se encaixa para esta finalidade.
Uma única linha , sem for sem while , simples e descomplicado

StringOfChar(SeuCaracter,QuantidadeDeCaracter-Length(SuaString))+SuaString);


muito fácil não ???
GOSTEI 0
Thiago Schnell

Thiago Schnell

08/04/2003

hm com VCL...


var
  s:string;
begin
s:=zerosaesquerda;
caption:=StringReplace($+copy(s,1,length(s)) ,$,0000,[])
end;
GOSTEI 0
Marco Salles

Marco Salles

08/04/2003

hm com VCL...
var
  s:string;
begin
s:=zerosaesquerda;
caption:=StringReplace($+copy(s,1,length(s)) ,$,0000,[])
end;

Não entendi .. quem é $ ??
GOSTEI 0
Marco Salles

Marco Salles

08/04/2003

hm com VCL...
var
  s:string;
begin
s:=zerosaesquerda;
caption:=StringReplace($+copy(s,1,length(s)) ,$,0000,[])
end;


quando eu disse VCl , não quiz dizer que não se consegue o efeito com funçoes Copy , StringReplace, Length da VCL . O que me refero é que a StringOfChar é a função recomendada da VCL para esta finalidade como o próprio Help do Delphi a enuncia

Returns a string with a specified number of repeating characters.

In Delphi code, StringOfChar returns a string that contains Count characters, with the character value given by Ch. For example,

S := StringOfChar(A, 10);

sets S to the string AAAAAAAAAA.

GOSTEI 0
Joatan Lima

Joatan Lima

08/04/2003

[quote:08b3c0291c=´Luis Rodrigo´][b:08b3c0291c]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:08b3c0291c][/quote:08b3c0291c]

Luis,

Como o campo é numérico, ele vai gravar da forma que está fazendo atualmente, ou seja, sem os zeros à esquerda. Para conseguir o efetio que você deseja (gravar com zeros), teria que alterar o campo para algum tipo caracter.
Eu acredito que o melhor a se fazer e manter da forma que está e utilizar alguma função para [b:08b3c0291c]exibir com zeros a esquerda[/b:08b3c0291c].

function StrZero(iNumero, iComp: Integer): String;
begin
  Result := StringOfChar(´0´,iComp-Length(IntToStr(iNumero)))+IntToStr(iNumero);
end;


Como usar no delphi (como chamar)?
GOSTEI 0
Arthur Heinrich

Arthur Heinrich

08/04/2003

[b:52e3bd0ae7]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:52e3bd0ae7]




Se o campo é numérico, ele armazena números em formato binário. Portanto, não é possível armazenar os zeros à esquerda, que não tem relevância para números.

O seu problema está relacionado à exibição dos valores armazenados e não ao armazenamento em si.

Existem duas formar de você resolver este problema.

1 - Alterar as telas e relatórios onde o número é exibido, para exibi-los com formatação, conforme algumas sugestões acima.
2 - Alterar o modelo e armazenar seu "código" numérico em colunas do tipo VARCHAR, que podem armazenar números já formatados.

Neste caso, é importante armazenar os valores sempre formatados, o que pode ser garantido por uma trigger, e, no momento de consultar, lembre-se de sempre comparar com valores texto, formatados.
GOSTEI 0
POSTAR