home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 01 / dbasepro / dbpro.pro < prev    next >
Encoding:
Prolog Source  |  1988-11-01  |  5.3 KB  |  163 lines

  1. /***********************************************************
  2.  *                           DBPRO.PRO                     *      
  3.  * Konvertierung einer dBase III Datei in eine             *
  4.  * dynamische Datenbank von Turbo-Prolog.                  *
  5.  * Voraussetzung: 1.keine MEMO-Felder i. d. dBase III Datei*
  6.  *                2.relativ geringe Größe der Datenbank    *
  7.  *                 (C) 1988 Dr. L.Wenzel & TOOLBOX         *
  8.  ***********************************************************/
  9. domains
  10.   file            = quelle;ziel;vorspann
  11.   art             = char
  12.   laenge,komma    = integer
  13.   feld            = string
  14.   name            = string
  15.   position        = integer
  16.   buchstabe       = string
  17. database
  18.   element (feld,art,laenge,komma)
  19. /***********************************************************
  20.  * Beschreibung der eingesetzten Prädikate                 *
  21.  ***********************************************************
  22.  *1. los --> dient dem automatischen Start des Programmes  *
  23.  *2. analyse(name) --> name=Name der Quelldatenbank        *
  24.  *3. analysefelder(position) --> absolute Adresse in der   *
  25.  *   Quelldatei, wird jeweils um 32 byte erhöht, dadurch   *
  26.  *   werden die Felder identifiziert und in der dynamischen*
  27.  *   Datenbank element abgelegt.                           *
  28.  *4. liesname(feld,laenge) --> setzt rekursiv aus der      *
  29.  *   Feldlänge den Feldnamen zusammen                      *
  30.  *5. zusammenbau --> realisiert den unter 4. angesprochenen*
  31.  *   Aufbau                                                *
  32.  *6. memoanalyse --> bricht Konvertierung ab, falls Memo-  *
  33.  *   Felder in der Quelldatei existieren                   *
  34.  *7. bindegleid1 + bindeglied2 --> konstruieren den Kopf   *
  35.  *   eines Turbo-Prolog Programmes, das die dynamische     *
  36.  *   Datenbank nutzt                                       *
  37.  *8. ueberspiel --> eigentliche Konvertierung der Daten    *
  38.  *9. decodierung --> zeichenweise Lesen und Schreiben der  *
  39.  *  unter 8. genannten Daten                               *
  40.  ***********************************************************/
  41. predicates
  42.   los
  43.   analyse(name)
  44.   analysefelder(position)
  45.   liesname(feld,laenge)
  46.   zusammenbau(buchstabe,feld,feld)
  47.   memoanalyse
  48.   bindeglied1
  49.   bindeglied2
  50.   ueberspiel(name)
  51.   decodierung(laenge)
  52. goal
  53.   makewindow(3,5,12,
  54.              "Konvertierung dBase III --> Turbo Prolog",
  55.              0,0,25,80),los.
  56. clauses
  57.   los:-
  58.     write("Geben Sie den Datenbanknamen ohne .DBF ein!"),
  59.     readln(Name),
  60.     concat(Name,".DBFD",Name1),
  61.     openread(quelle,Name1),
  62.     readdevice(quelle),
  63.     analyse(Name),
  64.     closefile(ziel),
  65.     closefile(quelle),
  66.     writedevice(screen),
  67.     nl,
  68.     write("Konvertierung erfolgreich abgeschlossen!"),nl.
  69. los:-
  70.   write("Fehlerhafte Eingabe!"),nl.
  71. analyse(Name):-
  72.   filepos(quelle,4,0),
  73.   readchar(Zeichen1),readchar(Zeichen2),
  74.   char_int(Zeichen1,Zahl1),char_int(Zeichen2,Zahl2),
  75.   ZahlSaetze=256*Zahl2+Zahl1,
  76.   write("Zahl der Saetze : ",ZahlSaetze),nl,
  77.   analysefelder(32),
  78.   memoanalyse,
  79.   concat(Name,".PRO",Name2),
  80.   openwrite(vorspann,Name2),writedevice(vorspann),
  81.   write("/* Bindeglied dBase III+ ---> Turbo Prolog */"),
  82.   nl,write("domains"),nl,
  83.   bindeglied1,
  84.   write("database"),nl,
  85.   write("    ",Name,"("),
  86.   bindeglied2,write("consult ",'"',Name,".DAT",'"'),nl,nl,
  87.   closefile(vorspann),writedevice(screen),
  88.   filepos(quelle,-1,1),
  89.   concat(Name,".DAT",Name3),
  90.   openwrite(ziel,Name3),writedevice(ziel),
  91.   ueberspiel(Name).
  92. analysefelder(Position):-
  93.   filepos(quelle,Position,0),
  94.   liesname(Feld,10),
  95.   write(Feld,"  --> "),
  96.   Position1=Position+11,
  97.   filepos(quelle,Position1,0),
  98.   readchar(Art),write(Art,"   "),
  99.   Position2=Position+16,filepos(quelle,Position2,0),
  100.   readchar(Zeichen1),char_int(Zeichen1,Laenge),
  101.   write(Laenge,"  "),
  102.   Position3=Position+17,filepos(quelle,Position3,0),
  103.   readchar(Zeichen2),char_int(Zeichen2,Komma),
  104.   write(Komma,""),nl,
  105.   assertz(element(Feld,Art,Laenge,Komma)),
  106.   Neuposition=Position+32,
  107.   analysefelder(Neuposition).
  108. analysefelder(_).
  109. liesname("",0).
  110. liesname(Feld,Laenge):-
  111.   Laenge>0,
  112.   readchar(Zeichen),str_char(Buchstabe,Zeichen),
  113.   char_int(Zeichen,Zahl),Zahl<>32,
  114.   Laenge1=Laenge-1,
  115.   liesname(Feld1,Laenge1),
  116.   zusammenbau(Buchstabe,Feld1,Feld).
  117. zusammenbau(Buchstabe,Feld1,Feld):-
  118.   Buchstabe<="0",
  119.   concat(Buchstabe,Feld1,Feld).
  120. zusammenbau(_,Feld1,Feld):-
  121.   Feld=Feld1.
  122. memoanalyse:-
  123.   element(_,Art,_,_),
  124.   Art='M',
  125.   write("MEMO-Felder vorhanden ! "),nl,
  126.   write("Abbruch mit ENTER"),
  127.   closefile(quelle),closefile(vorspann),
  128.   readln(_),exit.
  129. memoanalyse.
  130. bindeglied1:-
  131.   element(Feld,_,_,_),
  132.   write("    ",Feld," = "),
  133.   write("string"),nl,
  134.   fail.
  135. bindeglied1:-
  136.   write(),nl,nl.
  137. bindeglied2:-
  138.   element(Feld,_,_,_),
  139.   write(Feld,","),
  140.   fail.
  141. bindeglied2:-
  142.   filepos(vorspann,-1,1),write(")"),
  143.   nl,nl.
  144. ueberspiel(Name):-
  145.   filepos(quelle,-1,1),
  146.   readchar(_),write(Name,"("),
  147.   element(_,_,Laenge,_),
  148.   write('"'),decodierung(Laenge),
  149.   fail.
  150. ueberspiel(_):-
  151.   filepos(quelle,1,1),
  152.   eof(quelle),filepos(ziel,-1,1),
  153.   write(")"),nl.
  154. ueberspiel(Name):-
  155.   filepos(ziel,-1,1),write(")"),nl,ueberspiel(Name).
  156. decodierung(0):-
  157.   write('"',",").
  158. decodierung(Laenge):-
  159.   Laenge<0,
  160.   readchar(Zeichen),write(Zeichen),
  161.   Laenge1=Laenge-1,
  162.   decodierung(Laenge1).
  163.