Agora que fui mexer com isso.
Estou estranhando alguns números dessa tabela.
Considerando a ordem fÃsica do DBF, parece que era a categoria inteira, e os zeros ficaram à esquerda ao invés da direita.
O que já não vale pra estes outros.
Por enquanto só fiz um fonte convertendo isso pra .... um fonte que retorna um array com tudo.
E ajustando alguns caracteres pra não depender de codepage.
REQUEST HB_CODEPAGE_PTISO
PROCEDURE Main
LOCAL cTxt
Set( _SET_CODEPAGE, "PTISO" )
SetMode(40,100)
CLS
USE TABCEST
cTxt := "// Tabela CEST" + hb_Eol()
cTxt += hb_Eol()
cTxt += "FUNCTION TabelaCest()" + hb_Eol()
cTxt += hb_Eol()
cTxt += [ LOCAL aTabela := { ;] + hb_Eol()
DO WHILE ! Eof()
cTxt += [ { "] + tabcest->Ncm + [", "] + tabcest->Cest + [", "] + Limpa( tabcest->Descricao ) + [" } , ;]
cTxt += hb_Eol()
SKIP
ENDDO
CLOSE DATABASES
cTxt += [ { "X", "X", "X" } }] + hb_Eol()
cTxt += hb_Eol()
cTxt += "RETURN aTabela" + hb_Eol()
Checa( cTxt )
hb_MemoWrit( "teste.prg", cTxt )
RETURN
STATIC FUNCTION Limpa( cText )
cText := Trim( cText )
cText := StrTran( cText, Chr(10), "" )
cText := StrTran( cText, Chr(13), "" )
cText := StrTran( cText, ["], "" )
cText := StrTran( cText, Chr(161), "i" )
cText := StrTran( cText, Chr(198), "a" )
cText := StrTran( cText, Chr(162), "o" )
cText := StrTran( cText, Chr(130), "e" )
cText := StrTran( cText, Chr(160), "a" )
cText := StrTran( cText, Chr(135), "c" )
cText := StrTran( cText, Chr(252), "2" )
cText := StrTran( cText, Chr(131), "a" )
cText := StrTran( cText, Chr(163), "u" )
cText := StrTran( cText, Chr(228), "o" )
cText := StrTran( cText, Chr(163), "u" )
cText := StrTran( cText, Chr(136), "e" )
cText := StrTran( cText, Chr(147), "o" )
cText := StrTran( cText, Chr(133), "a" )
cText := StrTran( cText, Chr(224), "o" )
cText := StrTran( cText, Chr(181), "a" )
cText := StrTran( cText, Chr(39), "" )
RETURN cText
STATIC FUNCTION Checa( cTxt )
LOCAL cLetra
FOR EACH cLetra IN cTxt
DO CASE
CASE cLetra $ "abcdefghijklmnopqrstuvwxyz"
CASE cLetra $ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
CASE cLetra $ "0123456789"
CASE cLetra $ "{}=(%$:).,/-; "
CASE cLetra == Chr(34)
CASE cLetra == Chr(13)
CASE cLetra == Chr(10)
OTHERWISE
? cLetra, Asc( cLetra ), Substr( cTxt, cLetra:__EnumIndex - 25, 50 )
ENDCASE
NEXT
RETURN cTxt
Foi só uma idéia inicial.
Talvez melhor um XML como resource, ou o MySQL, ou outra coisa.