Ver Mensaje Individual
  #2  
Antiguo 09-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Todo depende de cómo quieras presentar los datos. Vamos a suponer que tu StringGrid se ve así:

Código:
+----+---------+-----------------------------------+--+
|0001|049730450|GONZALEZ Y GARCIA LUIS GERMAN      | 5|
+----+---------+-----------------------------------+--+
|0002|056001213|LAGUIRENNE Y CASTILLO JORGE ARMANDO| 8|
+----+---------+-----------------------------------+--+
|0003|056039483|VEGA ROLDAN OSCAR                  |10|
+----+---------+-----------------------------------+--+
|0004|057062998|ELORDUY ELORDUY AMALIA             | 7|
+----+---------+-----------------------------------+--+
|0005|058026887|KAMICHIKA Y KOHASHI YOSHINO        | 8|
+----+---------+-----------------------------------+--+
Puedes optar por presentar cada fila con los datos separados por comas:

Código:
0001,049730450,GONZALEZ Y GARCIA LUIS GERMAN,5
0002,056001213,LAGUIRENNE Y CASTILLO JORGE ARMANDO,8
0003,056039483,VEGA ROLDAN OSCAR,10
0004,057062998,ELORDUY ELORDUY AMALIA,7
0005,058026887,KAMICHIKA Y KOHASHI YOSHINO,8
O bien en columas de ancho fijo:

Código:
0001 049730450 GONZALEZ Y GARCIA LUIS GERMAN        5
0002 056001213 LAGUIRENNE Y CASTILLO JORGE ARMANDO  8
0003 056039483 VEGA ROLDAN OSCAR                   10
0004 057062998 ELORDUY ELORDUY AMALIA               7
0005 058026887 KAMICHIKA Y KOHASHI YOSHINO          8
o incluso como en la representación del grid que puse al principio.

En todos los casos te puedes valer de la función Format.

Vamos a suponer que presentas la información en un Memo. El primer caso (datos separados por comas) lo haces así:

Código Delphi [-]
const
  fmtLinea = '%s,%s,%s,%d';

var
  Linea: String;

begin
  Linea := Format(fmtLinea, ['0001', '049730450', 'GONZALEZ Y GARCIA LUIS GERMAN', 5]);
  Memo1.Lines.Add(Linea);

  Linea := Format(fmtLinea, ['0002', '056001213', 'LAGUIRENNE Y CASTILLO JORGE ARMANDO', 8]);
  Memo1.Lines.Add(Linea);

  Linea := Format(fmtLinea, ['0003', '056039483', 'VEGA ROLDAN OSCAR', 10]);
  Memo1.Lines.Add(Linea);

  Linea := Format(fmtLinea, ['0004', '057062998', 'ELORDUY ELORDUY AMALIA', 7]);
  Memo1.Lines.Add(Linea);

  Linea := Format(fmtLinea, ['0005', '058026887', 'KAMICHIKA Y KOHASHI YOSHINO', 8]);
  Memo1.Lines.Add(Linea);
end;

El primer parámetro de Format indica el formato para presentra los datos y en el segundo se especifican los datos en sí. En la cadena de formato, %s significa que el dato es una cadena de caracteres y %d que es un número entero.

Para el segundo caso (columnas de ancho fijo), el código es el mismo pero sustituyendo la cadena de formato por:

Código Delphi [-]
const
  fmtLinea = '%-5s%-10s%-36s%2d';

que igualmente indica que hay cuatro datos, tres son cadenas de caracteres y el último un número entero. Pero aquí, los modificadores entre % y s (o % y d) indican el ancho de la columna (5, 10, 36 y 2). El signo - indica que los datos deben presentarse alineados a la izquierda mientras que si no se pone significa que los datos van alineados a la derecha, como en la última columna.

Para que esto funcione bien, los anchos de las columnas deben ser por lo menos tanto como la longitud máxima del dato. Es decir, si un nombre (tercera columna) ocupa más de 35 caracteres se romperá el formato (puse 36 y no 35 para garantizar un espacio en blanco entre columnas).

Si quieres presentar los datos simulando un grid (tal como lo puse al principio) basta cambiar fmtLinea por:

Código Delphi [-]
const
  fmtLinea = |%-4s|%-9s|%-35s|%2d|;

En este caso, simplemente hay que añadir la línea divisoria entre cada dos líneas:

Código Delphi [-]
Memo1.Lines.Add('+----+---------+-----------------------------------+--+');

Claro que aquí los ejemplos está aplicados a datos estáticos. Para hacerlo con el StringGrid simplemente tienes que procesar cada línea con un ciclo:

Código Delphi [-]
var
  Linea: String;
  I: Integer;

begin
  for I := 0 to StringGrid1.RowCount - 1 do
    with StringGrid1 do
    begin
      Linea := Format(
        fmtLinea,
        [Cells[0, I], Cells[1, I], Cells[2, I], Cells[3, I]]
      );

      Memo1.Lines.Add(Linea);
    end;
end;

Aunque aquí, como todos los datos del StringGrid son cadenas de caracteres deberás susituir %d por %s en el último campo.

Finalmente, puedes sustituir Memo1.Lines por un TStringList y usar su método SaveToFile para guardar en un archivo.

Lo de escribir los datos directamente en el formulario supongo que te referías a algo como el Memo.

Ahora que, si realmente quieres escribir los datos directamente en el formulario, también puedes hacerlo. Preparas cada línea igual que antes y usas el método TextOut del Canvas del formulario.

// Saludos
Responder Con Cita