Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como llenar con espacion en blanco o con ceros una cadena? (https://www.clubdelphi.com/foros/showthread.php?t=27858)

Luis Alberto 02-12-2005 00:31:58

Como llenar con espacion en blanco o con ceros una cadena?
 
Hola a todos

Mi pregunta es la siguiente:


Yo genero un archivo de texto con informacion que estraigo de una BD hay y esta es separada por tamaños de campos, tengo algunos campos en mi Layout que debe ser llenados con espacion en Blanco o con 0000000. como realizo esta fncion

Alguien me puede explicar...

???

jachguate 02-12-2005 00:40:44

es simple:

Código Delphi [-]
  memo1.lines.add('000000    000000');

Hasta luego.

;)

Luis Alberto 02-12-2005 00:46:06

Creo que no es lo que necesariamente necesito pero gracias deja acomodar las ideas para explicar dicho asunto...

vtdeleon 02-12-2005 01:11:19

Saludos

Tengo este codigo
Código Delphi [-]
function rspace(Atext:string; Long:integer; Spac:char = ' '): String;
var
  X:integer;
begin
  Atext:=trim(Atext);
  if long < 0 then
    long:=0;
  x:=long-Length(AText);
  Result:=StringOfChar(Spac,X)+Atext;
end;
{ rspac('8',3,'0')
 el resultado sera ==>  '008'
}
No estoy seguro si es lo que quieres :o

delphi.com.ar 02-12-2005 13:36:00

Creo que este hilo puede servirte: http://www.clubdelphi.com/foros/showthread.php?t=12673

Saludos!

turekon 02-12-2005 15:04:38

hola puedes utilizar esta funcion que permite ajustar el tamaño de la cadena que se pasa por parametro, llenando los espacios con el caracter requerido, así como ajustar la alineacion de la cadena.

Código Delphi [-]
function FormatString(Cad, Str :String; Largo, Justi :Integer):String;
    var
       StrCad : String;
       CadO   : String;
       i,Tam  : Integer;
    begin
       StrCad := Cad;
       if StrCad = '' then
       begin
         StrCad := ' ';
       end;
       CadO := StrCad;
       if Largo > Length(StrCad) then
       begin
          Case Justi of
              1 : begin
                   for i := 1 to (Largo - Length(CadO)) do
                   begin
                       StrCad := StrCad + Str;
                   end;
                 end;
             2 : begin
                   for i := 1 to (Largo - Length(CadO)) do
                   begin
                       StrCad := Str + StrCad;
                   end;
                 end;
             3 : begin
                   Tam := (Largo - Length(CadO)) div 2;
                   for i := 1 to Tam do
                   begin
                    StrCad := Str + StrCad + Str;
                   end;
                   if (Largo-Length(CadO) mod 2 <> 0) then
                   begin
                       StrCad := StrCad;
                   end;
                 end;
          end;
        end
          else
           if Largo < Length(StrCad) then
          begin
              StrCad:=Copy(StrCad,1,Largo);
          end;
        FormatString:=StrCad;
    end;

espero sirva, para mis reportes y logs de seguimiento ha sido muy util.

asi lo utilizo:

Código Delphi [-]
         Writeln(ReporteF, FormatString( 'Nombre Archivo', ' ', 35, 1) +
                                  FormatString( 'Tamaño_Archivo', ' ', 20, 1) +
                            FormatString( 'Fecha', ' ', 20, 1) +
                            FormatString( 'Hora', ' ', 20, 1) +
                            FormatString( 'Estado Archivo', ' ', 15, 1));
          Writeln(ReporteF, FormatString( '-', '-', 35, 1) +
                                  FormatString( '-', '-', 20, 1) +
                            FormatString( '-', '-', 20, 1) +
                            FormatString( '-', '-', 20, 1) +
                            FormatString( '-', '-', 15, 1));
 
          for Ind:=0 to FileBox.Items.Count-1 do
          begin
             Writeln(ReporteF, FormatString( FileBox.Items.Strings[Ind], ' ', 35, 1) +
                                     FormatString( IntToStr(Tamanyo(FileBox.Items.Strings[Ind])), ' ', 20, 1) +
                               FormatString( FormatDateTime('yyyy-mm-dd', Now), ' ', 20, 1) +
                               FormatString( FormatDateTime('hh:mm:ss', Now), ' ', 20, 1) +
                               FormatString( 'Procesado', ' ', 15, 1));
          end;

un ejemplo de como quedaria el reporte.

Código Delphi [-]
  Nombre Archivo                     Tamaño_Archivo      Fecha               Hora                Estado Archivo 
  --------------------------------------------------------------------------------------------------------------
  00000123452005112815-34-29.LIS     293408              2005-12-01          15:06:29            Procesado

FunBit 02-12-2005 15:17:14

Código Delphi [-]
 
 procedure CerosDelante(var Cadena: String; longitud: integer);
 begin
 
   Cadena:=Copy(Pad('0',longitud),0,longitud-Length(Cadena))+Cadena;
    
 end;
 
 procedure CerosDetras(var Cadena: String; longitud: integer);
 begin
 
   Cadena:=Cadena+Copy(Pad('0',longitud),0,longitud-Length(Cadena));
 
 end;
 
 function Pad(S: String; WantLength:integer): String;
 begin
   if Length(S) > WantLength then begin
     Result := copy(S,1,WantLength);
   end else begin
     Result := S + space(WantLength-length(S));
   end;
 end;

function Space(spacelength:integer): String;
  var i:integer;
begin
  Result := '';
  for i := 1 to spacelength do begin
    Result := Result + ' ';
  end;
end;

CerosDelante -> concatena tantos ceros delante de la cadena como la diferencia entre la longitud especificada en la función y la real de la cadena.
CerosDetras -> Lo mismo pero por detrás.;):eek:

Para colaborar con la causa!

Espero que te sirva.

Saludos!!:D

FunBit 02-12-2005 15:21:21

Por cierto! Si quieres que en vez de 0 te ponga espacios en blanco, sólo tienes que cambiar el 1r parámetro de la funcion Pad de '0' a ' '.

Saludos!!

fidel 02-12-2005 18:04:29

Hola:

Para rellenar hasta 12 caracteres (con ceros delane)

entero := 345
cadenadoce := RightStr ( '000000000000' + IntToStr ( entero ) , 12 );

Para rellenar hasta 20 caracteres (con .... por detrás)

texto := 'Aragón'
cadenaveinte := LeftStr ( texto + '....................' , 20 );

Un saludo.

Luis Alberto 02-12-2005 18:37:03

Gracias por si ayuda estare revisando dichos codigos y consejos de como me dicen...

maeyanes 02-12-2005 19:14:02

Tambien puedes usar la función format para llenar con 0's:

Código Delphi [-]
  Cadena := Format('%.6d', [54]); // Cadena es igual a: '000054'


Saludos...


La franja horaria es GMT +2. Ahora son las 05:47:18.

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