Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Completar campo con zeros (https://www.clubdelphi.com/foros/showthread.php?t=61669)

alcides 17-11-2008 21:36:38

Completar campo con zeros
 
Hola a todos,
Utilizo delphi 7 y access,

Para crear un archivo txt, realizo lo siguiente:

procedure TFrm_Todo_Inventario.SpeedButton1Click(Sender: TObject);
var
slFile : TStringList;
campo1, campo2, campo3, campo4, campo5, campo6, campo7 : String;
campo8, campo9, campo10, campo11, campo12, campo13, campo14 : String;
campo15, campo19 : String;
campo16, campo17, campo18, campo20 : string;
slCampos : TStringList;
Titulo : String;
begin
slFile := TStringList.Create;
slCampos := TStringList.Create;

/// AdoQuery1.GetFieldNames(slCampos); //Obtenemos la lista de campos en slCampos
qry_rep_inventario.GetFieldNames(slcampos);
Titulo := slCampos.CommaText;
// Titulo := AnsiReplaceStr(Titulo, ',', ' ');
slFile.Add(Titulo);

// AdoQuery1.First;
qry_rep_inventario.First;
// While Not AdoQuery1.Eof do
While Not qry_rep_inventario.Eof do

begin
DecodeDate(qry_rep_inventarioFecha_Entrada.Value, ano_ent, mes_ent, dia_ent);
campo1 := inttostr(ano_ent);
campo2 := '0213';
campo3 := '01';
campo4 := '01';
campo5 := '0001';
campo6 := '01';
campo7 := '01';
campo8 := '01';
campo9 := '00';
campo10 := '0001';
campo11 := '100';
campo12 := '10';
campo13 := '0100';
if qry_rep_inventario.FieldbyName('Cuenta').ASString = '123' then begin
campo14 := '00617'
end;
if qry_rep_inventario.FieldbyName('Cuenta').ASString = '124' then begin
campo14 := '00613'
end;
if qry_rep_inventario.FieldbyName('Cuenta').ASString = '125' then begin
campo14 := '00614'
end;
if qry_rep_inventario.FieldbyName('Cuenta').ASString = '127' then begin
campo14 := '00612'
end;
campo15 :=' ';
// qry_rep_inventario.FieldbyName('tasa_depreciacion').ASString;
campo16 := qry_rep_inventario.FieldbyName('valor_adquisicion').Value;
campo17 := qry_rep_inventario.FieldbyName('depreciacion_acumulada').Value;
campo20 := qry_rep_inventario.fieldbyName('valor_libro').Value;
campo18 := qry_rep_inventario.FieldbyName('valor_adquisicion').Value;
campo19 := qry_rep_inventario.FieldbyName('Descripcion_Articulos').Value;

slFile.Add(campo1+''+campo2+''+campo3+''+campo4+''+campo5+''+campo6+''+campo7+''+campo8+''+campo9+'' +campo10+''+campo11+''+campo12+''+campo13+''+campo14+''+campo15+campo16+campo17+campo20+campo18+camp o19);
qry_rep_inventario.Next;
end;
slFile.SaveToFile('c:\archivo.txt');
end;



los campos, campo16, campo17, campo20 y campo19, los quiero completar con ceros hasta llegar a una mascara de 12 posiciones.


Gracias mil por la ayuda que me puedan brindar,


Alcides
Rep.Dom.

Khronos 17-11-2008 21:48:30

Hola alcides por favor lee la guia de estilo y utiliza las etiquetas delphi para poner tu código.
Yo que tu, en vez de emplear tantas variables de tipo string usaría un array:

Código Delphi [-]
type
TCampos = array [1..20] of string;

var
Campos: TCampos;
begin
Campos[1]:= '00001';
Campos[2]:= '12900';
....
end;

En cuanto a lo de completar con ceros, no lo entendí muy bien, por favor explícate mejor ;)

Salu2

Lepe 17-11-2008 21:52:31

mmmmm, así de memoria...

Código Delphi [-]
campo14 = stringofchar('0', 12 - length(campo14)) + campo14;
ShowMessage(campo14);

Saludos

alcides 17-11-2008 21:53:38

Gracias Khronos por la recomendacion, la tomare en cuenta, con relacion a lo de completar es lo siguiente: tengo varios campos de 12 posiciones, quiero que cuando tomen un valor si no llega a doce posiciones que se completen con ceros.


gracias mil



Alcides
Rep.Dom.

alcides 17-11-2008 21:56:00

Gracias Lepe,

Voy a chequear y te hago saber.




Alcides
Rep.Dom.

sitrico 17-11-2008 22:52:43

Te dejo las funciones:

Código Delphi [-]
Function FullZero(s:String;lon:Integer):String; Overload
Function FullZero(s:Int64;lon:Integer):String; Overload

Function FullZero(s:String;lon:Integer):String; Overload

Var
t : String[255];
Begin
t := StrRepli('0',lon)+trim(s);
t := Copy(t,Length(t)-lon+1,lon);
Result := t;
End;

Function FullZero(s:Int64;lon:Integer):String; Overload

Begin
Result := FullZero(IntToStr(s),lon);
End;

Function StrRepli(c:Char;lon:Integer):String;
Var
s : String[255];

Begin
If Lon < 0 then lon := 0;
If Lon > 255 Then Lon := 255;
FillChar(s,SizeOf(s),c);
SetLength(s,Lon);
Result := s;
End;

Aunque estoy seguro que son fuertes candidatas para este post :D
http://www.clubdelphi.com/foros/showthread.php?t=41240

miguel_pxyz 19-11-2008 20:27:24

También puedes usar la función Format

victor-cm 30-01-2009 18:49:03

Funcion de relleno
 
Mira yo he hecho esta funcion, quizás te sirva, es recursiva:

function rellenar(campo:string;con:char;longitud:byte):string;

begin
if longitud>length(campo) then
begin
campo:=concat(con,campo);
rellenar:=rellenar(campo,con,longitud)
end
else rellenar:=campo;

end;

Explicacion:
Campo: es la cadena a la que quieres añadir los ceros
Con: Con lo que quieres rellenar, en tu caso con '0' pero puedes poner lo que quieras
longitud: La longitud total de la cadena resultante.


Vamos que si quiero que la cadena sea de 10 caracteres rellenando con ceros y tengo esta: '123' la función sería:

rellenar('123','0',10)

y te devolvería: 0000000123

Ohcan 20-02-2009 17:39:15

Hola (Cuanto tiempo sin postear...)

A mi se me ha ocurrido esta funcion:
Código Delphi [-]
function CompletarCon(TextoACompletar: String; CompletarCon: Char;   LongitudTotal: Integer): String; 
var   
  I:Integer; 
begin   
  if LongitudTotal>Length(TextoACompletar) then     
    for I := 1 to LongitudTotal-Length(TextoACompletar) do         
      TextoACompletar := CompletarCon + TextoACompletar;     
  Result := TextoACompletar; 
end; 
//De tal forma que  
CompletarCon('Hola', '0', 6);  
//Devolvería 00Hola



Saludos


La franja horaria es GMT +2. Ahora son las 19:31:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi