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.