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