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.