Delphi - Pasar DB a un Fichero TXT

 
Vista:

Pasar DB a un Fichero TXT

Publicado por isidro (3 intervenciones) el 22/05/2003 14:03:06
Buenas. Tengo q pasar una BD paradox a un fechero txt. El problema esta cuando queiro pasar campos al fichero TXT en una determinada posicion, es decir; el campo NOM y APE tienen que ir en la posicion del fichero TXT (20 y 80) pero los campos son de 40 Caracteres. La duda es como puedo escribir el Campo NOM en la Posicion 20 y al APE en la Posicion 80.

Un saludo a tod@s de antemano y GRACIAS por vuentra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pasar DB a un Fichero TXT

Publicado por Ernesto De Spirito (706 intervenciones) el 22/05/2003 21:29:35
Puedes usar el driver ASCII de la BDE para poder abrir el archivo de texto con un componente TTable, tal como si fuera una tabla Paradox, y si el origen de los datos es un TBDEDataset (TTable o TQuery) hasta puedes exportar los datos simplemente con una llamada al método BatchMove o bien usando el componente TBatchMove si quieres más control sobre la operación.

En el Boletín Pascal #27 publiqué el artículo "Abriendo archivos de datos separados por comas" donde muestro como abrir archivos de texto como tablas con la BDE usando archivos de esquema: http://www.latiumsoftware.com/es/pascal/0027.php

Aunque en el ejemplo usé un archivo delimitado por comas, con unos cambios se puede hacer que sirva para archivos donde los campos tienen tamaño fijo rellenados con espacios, por ejemplo.

[table1]
FILETYPE=FIXED
CHARSET=ascii
DELIMITER=
SEPARATOR=
Field1=FILLER1,Char,20,00,00
Field2=NOM,Char,40,00,20
Field1=FILLER2,Char,20,00,60
Field4=APE,Char,40,00,80

Así tendrás los campos NOM y APE, ambos de 40 caracteres, en las posiciones 20 y 80 respectivamente, tal como se te requiere, para lo cual se han puesto dos campos de relleno (contendrán espacios).

Otra alternativa sería escribir directamente en el archivo, por ejemplo con WriteLn o con TFileStream.Write, o incluso cargar un TStringList y finalmente hacer un SaveToFile. Como sea, lo que necesitarás es armar la cadena con cada registro:

s := StringOfChar(' ', 20) + LSet(Nombre, 40) + StringOfChar(' ', 20) + LSet(Apellido, 40);

LSet es una función que escribí hace tiempo justamente para menesteres como estos:

function LSet(const s: string; size: integer; padchar: char = ' '):
string;
// LSet('1', 5, '*') --> '1****'
// LSet('123456', 5, '*') --> '12345'
begin
Result := Copy(s + StringOfChar(padchar, size), 1, size);
end;

Espero que te sirva.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar