O fonte testado, agora com mais campos:
Código: Selecionar todos
PROCEDURE Main
LOCAL aCamposList, cNome, cTipo, nLen, nRow, aCampo
aCamposList := { ;
{ "codigo", "N", 6 }, ;
{ "nome", "C", 30 }, ;
{ "endereco", "C", 30 }, ;
{ "cidade", "C", 20 }, ;
{ "bairro", "C", 20 }, ;
{ "uf", "C", 2 } }
SET ALTERNATE TO test.txt
SET ALTERNATE ON
? [PROCEDURE Main]
FOR EACH aCampo IN aCamposList
cNome := aCampo[1]
cTipo := aCampo[2]
nLen := aCampo[3]
? [LOCAL ] + iif( cTipo == "N", [n], [c] ) + cNome + [ := ] + iif( cTipo == "N", [0], [Space(] + Ltrim( Str( nLen ) ) + [)] )
NEXT
? [SetMode(25,80)]
nRow := 1
FOR EACH aCampo IN aCamposList
cNome := aCampo[1]
cTipo := aCampo[2]
nLen := aCampo[3]
(nLen) // nao usado
? [@ ] + Ltrim( Str( nRow ) ) + [, 0 SAY "] + cNome + [" GET ] + iif( cTipo == "N",[n], [c] ) + cNome
nRow += 1
NEXT
? [READ]
SET ALTERNATE OFF
SET ALTERNATE TO
RETURN
O resultado gerado:
PROCEDURE Main
LOCAL ncodigo := 0
LOCAL cnome := Space(30)
LOCAL cendereco := Space(30)
LOCAL ccidade := Space(20)
LOCAL cbairro := Space(20)
LOCAL cuf := Space(2)
SetMode(25,80)
@ 1, 0 SAY "codigo" GET ncodigo
@ 2, 0 SAY "nome" GET cnome
@ 3, 0 SAY "endereco" GET cendereco
@ 4, 0 SAY "cidade" GET ccidade
@ 5, 0 SAY "bairro" GET cbairro
@ 6, 0 SAY "uf" GET cuf
READ
gerar fonte é difícil ?
não
só precisa de um modelo, e encontrar a fórmula de cálculo das posições.
Pra quem não notou, a lista é equivalente a dbStruct() que pega a estrutura de um DBF.
Tá aí uma geração automática pra DBF, básica.
só trocar isto:
Código: Selecionar todos
aCamposList := { ;
{ "codigo", "N", 6 }, ;
{ "nome", "C", 30 }, ;
{ "endereco", "C", 30 }, ;
{ "cidade", "C", 20 }, ;
{ "bairro", "C", 20 }, ;
{ "uf", "C", 2 } }
por isto:
Lógico, falta campo Date(), Memo(), etc.
É só um modelo básico.