Thema_5

block_1.lst

' Speicherung von RAM-Inhalten auf Laufwerk (A: bzw. C:)
'
//Programm Block speichern und laden (schnell!)
OPTION BASE 1
OPENW #1,10,10,_X-20,_Y-20,$2f0
TITLEW #1,"BSAVE und BLOAD"
elemente%=2500
DIM a%(elemente%)
FOR i%=1 TO elemente%
  a%(i%)=RAND(1000000)  // Feld zufällig füllen
  IF i%<16
    PRINT a%(i%)
  ENDIF
NEXT i%
PRINT " ... sind die 15 ersten Elemente:"
PRINT
PRINT
PRINT "          weiter:  beliebige Taste"
KEYGET dd%
//
addr%=V:a%(1)        // Lage und Größe des Feldes
anz%=(V:a%(2)-V:a%(1))*elemente%
PRINT
COLOR 15,9
PRINT "B(lock)save in Datei:"
FILESELECT "A:\*.dat","*.dat",datei$
BSAVE datei$,addr%,anz%
//
ERASE a%()
TEXT 10,_Y-60,"erstes Feld gelöscht, B(lock)load aus der Datei:"
TEXT 10,_Y-30,"dat-DATEI auswählen!"
DIM b%(elemente%)          // neues Feld zur Demonstration
addr%=V:b%(1)
anz%=(V:b%(2)-V:b%(1))*elemente%
FILESELECT "A:\*.dat","*.dat",datei$

BLOAD datei$,addr%
//
CLS 7
PRINT "Die 15 ersten eingelesenen Werte im neuen Feld:"
FOR i%=1 TO 15
  PRINT b%(i%)
NEXT i%
PRINT
PRINT "weiter: beliebige Taste"
KEYGET a%
CLOSEW #1
'
' AUFGABEN: 1. Quadratzahlen statt Zufallszahlen nutzen.
'           2. Speichern von double-Zahlen.

datei_2.lst

' Dateien mit wahlfreiem Zugriff
' Datei, Datensatz, Satzlänge, Satznummer
' Dateilänge, Datenkanal
' Datenbanken
'
//Programm RANDOM-ACCESS-DATEI
OPENW #1,10,10,_X - 20,_Y - 20, -1   // -1  alle Bit's auf 1 gesetzt!
ALERT 2,"Dateinamen|auswählen",0,"OK",al|
dateiname$ = ""
FILESELECT "A:\*.DAT","DATEI_1.DAT",dateiname$
IF dateiname$ = ""
  END   // schnelles Ende (nur für "primitive" Programme!)
ENDIF
// Hinweis: OPTION BASE ,1 ergibt Satzzählung ab 1
// -> dann weitere Änderungen im Programm zur Satzzählung nötig!
TYPE person:
- STRING(30) name$
- LONG plz
- STRING(30) ort$
- DOUBLE betrag#
ENDTYPE          //  72 Byte Satzlänge
person: datpu.
OPEN "R",#11,dateiname$,LEN(datpu.)  // Random- Datei öffnen
FIELD #11, LEN(datpu.) AT (V:datpu.) // Datenfeldeinteilung aus Type var
satzanzahl% = LOF(#11) / LEN(datpu.)   // ... Length Of File
PRINT "Anzahl der Datensätze in der Datei! ";satzanzahl%
ALERT 2,"Datensätze|schreiben|lesen",0,"schreib|lesen",sl|
IF sl| = 1  // schreiben auf Datenträger
  satz% = LOF(#11)/LEN(datpu.) // VORSICHT! Satzzählung ab 0. Datensatz
  REPEAT
    INPUT "Name: ",inp_name$ // Variablen nur bei INPUT als Zwischenspeicher
    INPUT "PLZ: ",inp_plz%   // (INPUT mit Type-Variablen nicht möglich!)
    INPUT "Ort: ",inp_ort$
    INPUT "Betrag: ",inp_betrag
    datpu.name$ = SPACE$(30)  // Strings leeren
    datpu.name$ = inp_name$
    datpu.plz = inp_plz%
    datpu.ort$ = SPACE$(30)   // Strings leeren
    datpu.ort$ = inp_ort$
    datpu.betrag# = inp_betrag
    PUT #11,satz%                   // Datensatz schreiben
    ALERT 2,"weiterer|Datensatz",1,"OK|ENDE",oe|
    INC satz%
  UNTIL oe| = 2
ENDIF
IF sl| = 2  // lesen vom Datenträger
  FOR satz% = 0 TO satzanzahl% - 1  // wegen Satzzählung ab 0.
    GET #11,satz%                   // Datensatz lesen
    PRINT "Name ";datpu.name$;"  PLZ ";datpu.plz;"  Ort ";datpu.ort$;"  Betrag ";datpu.betrag#
    PRINT
  NEXT satz%
  DELAY 5
ENDIF
CLOSE #11
CLOSEW #1
'
' AUFGABEN: 1. Nur einzelne Sätze lesen, z.B. jeder zweite Satz,
'              0. und letzter Satz usw.