Export do formátu DBF je rozumnou cestou převodu FANDovských dat do jiných systémů. PC FAND sám "uznává" formát DBF (dBase III), ale není jednoduché DBF soubory deklarovat, protože některé typy údajů formát DBF nezná.
Export je nejlépe realizovat přímo v úloze, kde jsou datové soubory deklarovány; stačí přidat jeden parametrický soubor a dvě procedury. Takto vytvořené soubory lze přímo zpracovat např. v Excelu (textové údaje musí být v kódu Latin 2).
K automatickému převodu deklarace je možno využít málo známého FAND-Prologu. L-procedura pro převod může vypadat takto:
{L DeklDBF - Vytvoří deklaraci souboru *.DBF (jen uložené údaje)} #DOMAINS Příznak = Integer #CONSTANTS Příznak: uložený=1, šifrovaný=2, sMaskou=4, myšČárka=8, zarovnaný=16 #DATABASE @prevpara (Soubor/String) {parametrický soubor PREVPARA} #PREDICATES @zapišDBFdek['(Text: String) Begin PREVPARA.DBFdek:= Text End;'](LongString) {zápis do param. souboru - přímo to nejde} intStr(Integer,&String) {převod Integer -> String} druhÚdaje(Příznak,&String) {označení vypočítaných údajů} listLong(L_String,&LongString) {převod List -> LongString} převeď(String,Integer,Integer,&String) {převod kódovaného typu do textového} deklÚd(String,&String) {převod kódované deklarace údaje do textové} #CLAUSES intStr(I,str(I)). druhÚdaje(uložený,''). listLong([],''). listLong([H|T],H+'\13'+LS):- listLong(T,LS). {definice převodu typů *.000 do typů *.DBF} převeď('F',M,N,'F,'+X+'.'+Y):- intStr(M,X), intStr(N,Y). převeď('A',M,_,'A,'+X):- intStr(M,X). převeď('N',M,_,'A,'+X):- intStr(M,X). {N převeď na A} převeď('D',_,_,'D'). převeď('B',_,_,'B'). převeď('T',_,_,'T'). převeď('R',_,_,'F,12.6'). {R převeď na F} deklÚd(Soubor,PředZn+NázÚd+':'+SpecifÚd+';'):- fandfield(Soubor,NázÚd,TypÚd,M,N,F,_), druhÚdaje(F&&uložený,PředZn), převeď(TypÚd,M,N,SpecifÚd). #CLAUSES main:- prevpara(Soubor), {načti zadané jméno souboru} zapišDBFdek(''), {vyprázdni PREVPARA.DBFdek} fandfile(Soubor,_,_,_), {vyhledej Soubor v úloze (není-li, konec)} all_String(deklÚd(Soubor,Dek1),Dek1,SezDek), {seznam jeho deklarací} listLong(SezDek,Dekl), {převeď na text} zapišDBFdek(Dekl). {a zapiš do PREVPARA.DBFdek} {-----------------------------------------------------------------------------}
Procedura vyzvedne jméno převáděného souboru z globální proměnné PREVPARA.Soubor a vytvoří k němu DBF deklaraci, kterou uloží do globální proměnné PREVPARA.DBFdek (logická procedura nemůže mít parametry, proto komunikuje přes parametrický soubor).
Parametrický soubor má deklaraci
{F PREVPARA} Soubor: A,8; DBFdek: T; #K @@ {-----------}
Exportní procedura může být např.
{P Převod} Var Soubor,ExpDekl: String; Begin Soubor:= TrailChar(' ',UpCase(Prompt('Soubor k převodu: ':A,8))); If EscPrompt|Soubor='' then Exit; PREVPARA.Soubor:= Soubor; Lproc(DeklDBF); ExpDekl:= TrailChar(';',TrailChar('\13',PREVPARA.DBFdek)); {odstranit poslední ';' a CR na konci} EXPDBF.Path:= TrailChar(' ',Soubor)+'.DBF'; {EXPDBF musí být v katalogu} Proc(['Var EXPDBF: File.DBF['+ExpDekl+']; sRec: Record of '+Soubor+'; eRec: Record of EXPDBF; Begin ' +'ForAll sRec % do ' +' Begin eRec:=sRec; WriteRec(eRec,0); End;' +'Close(EXPDBF); End;']); End; {--------------------------------------------------------------------------}
Před spuštěním exportu je třeba zapsat do katalogu soubor EXPDBF
NazUlohy NazSouboru Ar Cesta Navesti PREVODBF EXPDBF 00
Tím se obejde shoda jmen původního a exportního souboru (mají ovšem různé přípony).