home *** CD-ROM | disk | FTP | other *** search
Prolog Source | 1989-11-01 | 5.4 KB | 164 lines |
- /***********************************************************
- * DBPRO.PRO *
- * Konvertierung einer dBase III Datei in eine *
- * dynamische Datenbank von Turbo-Prolog. *
- * Voraussetzung: 1.keine MEMO-Felder i. d. dBase III Datei*
- * 2.relativ geringe Größe der Datenbank *
- * VON DRUCKFEHLERN BEREINIGTE VERSION *
- * (C) 1989, 1990 Dr. L.Wenzel & TOOLBOX *
- ***********************************************************/
- domains
- file = quelle;ziel;vorspann
- art = char
- laenge,komma = integer
- feld = string
- name = string
- position = integer
- buchstabe = string
- database
- element (feld,art,laenge,komma)
- /***********************************************************
- * Beschreibung der eingesetzten Prädikate *
- ***********************************************************
- *1. los --> dient dem automatischen Start des Programmes *
- *2. analyse(name) --> name=Name der Quelldatenbank *
- *3. analysefelder(position) --> absolute Adresse in der *
- * Quelldatei, wird jeweils um 32 byte erhöht, dadurch *
- * werden die Felder identifiziert und in der dynamischen*
- * Datenbank element abgelegt. *
- *4. liesname(feld,laenge) --> setzt rekursiv aus der *
- * Feldlänge den Feldnamen zusammen *
- *5. zusammenbau --> realisiert den unter 4. angesprochenen*
- * Aufbau *
- *6. memoanalyse --> bricht Konvertierung ab, falls Memo- *
- * Felder in der Quelldatei existieren *
- *7. bindegleid1 + bindeglied2 --> konstruieren den Kopf *
- * eines Turbo-Prolog Programmes, das die dynamische *
- * Datenbank nutzt *
- *8. ueberspiel --> eigentliche Konvertierung der Daten *
- *9. decodierung --> zeichenweise Lesen und Schreiben der *
- * unter 8. genannten Daten *
- ***********************************************************/
- predicates
- los
- analyse(name)
- analysefelder(position)
- liesname(feld,laenge)
- zusammenbau(buchstabe,feld,feld)
- memoanalyse
- bindeglied1
- bindeglied2
- ueberspiel(name)
- decodierung(laenge)
- goal
- makewindow(3,5,12,
- "Konvertierung dBase III --> Turbo Prolog",
- 0,0,25,80),los.
- clauses
- los:-
- write("Geben Sie den Datenbanknamen ohne .DBF ein!"),
- readln(Name),
- concat(Name,".DBFD",Name1),
- openread(quelle,Name1),
- readdevice(quelle),
- analyse(Name),
- closefile(ziel),
- closefile(quelle),
- writedevice(screen),
- nl,
- write("Konvertierung erfolgreich abgeschlossen!"),nl.
- los:-
- write("Fehlerhafte Eingabe!"),nl.
- analyse(Name):-
- filepos(quelle,4,0),
- readchar(Zeichen1),readchar(Zeichen2),
- char_int(Zeichen1,Zahl1),char_int(Zeichen2,Zahl2),
- ZahlSaetze=256*Zahl2+Zahl1,
- write("Zahl der Saetze : ",ZahlSaetze),nl,
- analysefelder(32),
- memoanalyse,
- concat(Name,".PRO",Name2),
- openwrite(vorspann,Name2),writedevice(vorspann),
- write("/* Bindeglied dBase III+ ---> Turbo Prolog */"),
- nl,write("domains"),nl,
- bindeglied1,
- write("database"),nl,
- write(" ",Name,"("),
- bindeglied2,write("consult ",'"',Name,".DAT",'"'),nl,nl,
- closefile(vorspann),writedevice(screen),
- filepos(quelle,-1,1),
- concat(Name,".DAT",Name3),
- openwrite(ziel,Name3),writedevice(ziel),
- ueberspiel(Name).
- analysefelder(Position):-
- filepos(quelle,Position,0),
- liesname(Feld,10),
- write(Feld," --> "),
- Position1=Position+11,
- filepos(quelle,Position1,0),
- readchar(Art),write(Art," "),
- Position2=Position+16,filepos(quelle,Position2,0),
- readchar(Zeichen1),char_int(Zeichen1,Laenge),
- write(Laenge," "),
- Position3=Position+17,filepos(quelle,Position3,0),
- readchar(Zeichen2),char_int(Zeichen2,Komma),
- write(Komma,""),nl,
- assertz(element(Feld,Art,Laenge,Komma)),
- Neuposition=Position+32,
- analysefelder(Neuposition).
- analysefelder(_).
- liesname("",0).
- liesname(Feld,Laenge):-
- Laenge>0,
- readchar(Zeichen),str_char(Buchstabe,Zeichen),
- char_int(Zeichen,Zahl),Zahl<>32,
- Laenge1=Laenge-1,
- liesname(Feld1,Laenge1),
- zusammenbau(Buchstabe,Feld1,Feld).
- zusammenbau(Buchstabe,Feld1,Feld):-
- Buchstabe>="0",
- concat(Buchstabe,Feld1,Feld).
- zusammenbau(_,Feld1,Feld):-
- Feld=Feld1.
- memoanalyse:-
- element(_,Art,_,_),
- Art='M',
- write("MEMO-Felder vorhanden ! "),nl,
- write("Abbruch mit ENTER"),
- closefile(quelle),closefile(vorspann),
- readln(_),exit.
- memoanalyse.
- bindeglied1:-
- element(Feld,_,_,_),
- write(" ",Feld," = "),
- write("string"),nl,
- fail.
- bindeglied1:-
- write(),nl,nl.
- bindeglied2:-
- element(Feld,_,_,_),
- write(Feld,","),
- fail.
- bindeglied2:-
- filepos(vorspann,-1,1),write(")"),
- nl,nl.
- ueberspiel(Name):-
- filepos(quelle,-1,1),
- readchar(_),write(Name,"("),
- element(_,_,Laenge,_),
- write('"'),decodierung(Laenge),
- fail.
- ueberspiel(_):-
- filepos(quelle,1,1),
- eof(quelle),filepos(ziel,-1,1),
- write(")"),nl.
- ueberspiel(Name):-
- filepos(ziel,-1,1),write(")"),nl,ueberspiel(Name).
- decodierung(0):-
- write('"',",").
- decodierung(Laenge):-
- Laenge>0,
- readchar(Zeichen),write(Zeichen),
- Laenge1=Laenge-1,
- decodierung(Laenge1).
-