El guardado de los registros sería lo mas fácil, donde aDbf es la matriz que quieres guardar en el dbf.
aEval( aDbf, { | aReg | dbAppend(), aEval( aReg, { | campo, pos | fieldPut( pos, campo ) } ) } )
El crear la tabla es mas complejo, se me ocurre algo como:
aEstruc := array( aDbf[ 1 ] )
nCont := 0 // para no chocar entre harbour y xharbour
for each dato in aDbf[ 1 ]
nCot++
switch valType( dato )
case "C"
aEstruc[ nCont ] := { "_" + lTrim( str( nCont ), "C", len( dato ), 0 }
exit
case "N"
if int( dato ) == dato
aEstruc[ nCont ] := { "_" + lTrim( str( nCont ), "N", len( str( dato ) ), 0 }
else
aEstruc[ nCont ] := { "_" + lTrim( str( nCont ), "N", len( str( dato ) ), len( str( dato ) ) - len( str( int( dato ) ) ) - 1 }
endIf
exit
case "L"
aEstruc[ nCont ] := { "_" + lTrim( str( nCont ), "L", 1, 0 }
exit
case "D"
aEstruc[ nCont ] := { "_" + lTrim( str( nCont ), "L", 8, 0 }
exit
end switch
next
Si tienes algun otro tipo de variable, es cosa de que lo incluyas dentro del switch