RE:Pasar DB a un Fichero TXT
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