Ver Mensaje Individual
  #15  
Antiguo 02-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ezequiel913.

Te documento el código linea a linea:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  BM: TBookMarkStr;
  i: Integer;
  s: string;
  ArchTexto: TextFile;
begin
  // Asociar un nombre de archivo a una variable de tipo File
  AssignFile(ArchTexto,'C:\A_LA_DERECHA.TXT');
  // Crear un archivo, abrirlo
  Rewrite(ArchTexto);
  // Guardar posición actual del DataSet
  BM:= DBGrid1.DataSource.DataSet.Bookmark;
  // Desactivar el mostrado en los controles data-aware asociados al DataSet
  DBGrid1.DataSource.DataSet.DisableControls;
  // Posicionarnos en el primer registro del DataSet
  DBGrid1.DataSource.DataSet.First;
  // Mientras el DataSet tenga registros...
  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    s:= ''; // Inicializar cadena a vacío
    for i:= 0 to DBGrid1.FieldCount - 1 do  // desde el 1er al último campo
    begin
      // Concatenar en 's' cada campo con tantos espacios a la izquierda 
      // como le falten al largo actual del campo para llegar al largo declarado
      s:= s + StringOfChar(' ', DBGrid1.Fields[i].DisplayWidth -
                           Length(DBGrid1.Fields[i].AsString)) +
                           DBGrid1.Fields[i].AsString;
    end;
    // Guardar el campo ajustado en el archivo de texto
    Writeln(ArchTexto, s);
    // Desplazarnos al próximo registro del DataSet
    DBGrid1.DataSource.DataSet.Next;
  end;
  // Cerrar archivo.
  CloseFile(ArchTexto);
  // Volver a posición previamente guardada del DataSet
  DBGrid1.DataSource.DataSet.Bookmark:= BM;
  // Activar el mostrado en los controles data-aware asociados al DataSet
  DBGrid1.DataSource.DataSet.EnableControls;
end;
Lo que puede quedar un poco confuso es el uso de StringOfChar, que devuelve n caracteres iguales al especificado.
Si queremos mostrar la palabra 'hola' (de longitud 4) ajustada a longitud 7 rellenando con '@' los lugares faltantes a la izquierda sería:
Código Delphi [-]
   ShowMessage(StringOfChar('@',7-Length('hola'))+'hola'); // muestra: @@@hola 
  //Que es el resultado de concantenar  tantos '@' como le faltan a 'hola'
  //para llegar a una longitud de 7 caracteres y la palabra 'hola'
De todas formas si hay algo en lo que no me expliqué bién, te ruego que me lo hagas saber y gustoso busco otra forma de hacerlo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita