Hola German:
Normalmente lo que uso para hacer lo que estas preguntando es una rutina, metodo o funcion que lea el DBF y lo grabe en TXT. Un ejemplo seria este:
1. Guardo en una propiedad del form que estoy usando los campos que quiero exportar
THISFORM.cotros = 'fields cgoCategoria, nomCategoria, precio'
1.1 Si deseas hacer un filtro de los datos a importar podes usar otra propiedad que contenga las condiciones de exportacion, sino la dejas de esta manera:
thisform.condicion = .t.
2. Despues coloco un boton que el usuario deberia presionar para comenzar la exportacion que contiene el siguiente codigo.
nomfile = putfile('Nombre de documento','','txt')
if !empty(nomfile)
wait wind "Exportando a Texto..." nowait
programa = 'copy to "' + nomfile + '" delimited for ' + thisform.condicion + ' ' + thisform.cotros
&programa
wait clear
if file(nomfile)
if messagebox('Se ha exportado a texto satisfactoriamente' + chr(13) + 'Desea ver el documento generado?',292,'Reportes') = 6
DECLARE INTEGER ShellExecute IN SHELL32.DLL INTEGER nWinHandle, STRING cOperation, STRING cFileName, STRING cParameters, STRING cDirectory, INTEGER nShowWindow
ShellExecute(0,"open",nomfile,"","",1)
endif
else
messagebox('No se ha podido exportar a texto',48,'Error')
endif
endif
Con esto estaria solucionado el 1º punto
--------------------------------------
Para hacer el proceso inverso debes mantener los criterios de importacion,es decir;
1. caracter separador
2. formato de grabado
3. campos a importar
El codigo para hacerlo seria algo asi:
THISFORM.nomfile = "nombre_archivo_a_importar"
IF !EMPTY(THISFORM.nomfile)
nfile = FOPEN(THISFORM.nomfile)
IF nfile > 0
SET COMPATIBLE ON
todo = ALLTRIM(FREAD(nfile,FSIZE(THISFORM.nomfile)))
SET COMPATIBLE OFF
=FCLOSE(nfile)
*** ACA DEBERIAS HACER LOS CONTROLES NECESARIOS PARA CORROBORAR QUE SE IMPORTO EL ARCHIVO CORRECTO. EN ESTE EJEMPLO ESTOY CONTROLANDO QUE EXISTAN 3 CAMPOS INDISPENSABLES
IF AT("CUIT",todo) = 0 .OR. AT("DENOMINACION",todo) = 0 .OR. AT("CBU",todo) = 0
MESSAGEBOX("El archivo seleccionado no es el correcto.", 48, THISFORM.CAPTION)
THISFORM.nomfile = ""
ENDIF
ELSE
MESSAGEBOX("Error al leer archivos RG1934", 48, "Error")
THISFORM.nomfile = ""
ENDIF
ENDIF
*** A partir de aca estas seguro que es el archivo que necesitas y tenes todo el contenido del mismo en memoria por lo que podes recorrerlo a gusto y cargar los campos de la DBF con los valores del TXT.
Espero te haya servido la ayuda, sino mandame un e-mail que vemos que problemas tenes
Saludos
Pedro R. Larrosa