fb:porticula NoPaste
Mehrdimensionales Array in Textdatei speichern und daraus auslesen
Uploader: | Sebastian |
Datum/Zeit: | 07.01.2013 14:45:06 |
' Code-Beilage zu Forenthread:
' http://forum.qbasic.at/viewtopic.php?t=8053
'
' Getestet mit FreeBASIC 0.24.0 unter Windows 7 x64
'
' Datum: 07.01.2013, Lizenz: FBPSL
'
' Keine Gewaehrleistung fuer die inhaltliche und technische Richtigkeit.
' Verwendung ausschliesslich auf eigene Gefahr.
declare sub erzeugZufallszahlen (daten() as ubyte)
declare sub speicherArray (daten() as ubyte, dateiname as string)
declare sub ladeArray (dateiname as string, daten() as ubyte)
declare sub zeigGanzesArrayAn (zeilenanfang as string, daten() as ubyte)
randomize timer 'Pseudozufallszahlen-Generator initialisieren,
'weil im Programm spaeter womoeglich Zufallszahlen
'gebraucht werden.
dim as ubyte GZ(1 to 9, 1 to 9, 1 to 9)
dim as ubyte TZ(1 to 9, 1 to 9, 1 to 9)
dim as integer auswahl
'Pfade fuer die Datendateien. EXEPATH gibt dabei das Verzeichnis
'zurueck, in dem sich das ausfuehrbare Programm befindet.
dim as string DateiGZ = exepath + "\daten_gz.txt"
dim as string DateiTZ = exepath + "\daten_tz.txt"
Print "Auswahl:"
Print " (1) Dateien neu erzeugen (ggf. ueberschreiben)"
Print " (2) Dateien einlesen"
Print " (0) Programm beenden"
Print
Input "Ihre Wahl? (0/1/2) --> ", auswahl
Print
If (auswahl = 1) Then 'neue Zahlen, neue Dateien!
erzeugZufallszahlen ( GZ() )
erzeugZufallszahlen ( TZ() )
speicherArray ( GZ(), DateiGZ )
speicherArray ( TZ(), DateiTZ )
Print "Die Dateien wurden mit neuen Zufallszahlen erstellt."
ElseIf (auswahl = 2) Then 'Laden
ladeArray ( DateiGZ, GZ() )
ladeArray ( DateiTZ, TZ() )
' Alle Zahlen ausgeben:
zeigGanzesArrayAn ("GZ", GZ() )
Print "--------------------------"
zeigGanzesArrayAn ("TZ", TZ() )
Print
End If
print
print "Programm beendet. Beliebige Taste zum Schliessen druecken."
sleep
end
sub erzeugZufallszahlen (daten() as ubyte)
'Alle Indizes des Arrays durchlaufen ...
for i as integer = lbound(daten,1) to ubound(daten,1)
for j as integer = lbound(daten,2) to ubound(daten,2)
for k as integer = lbound(daten,3) to ubound(daten,3)
' ... und die Elemente mit Zufallswerten [0;255] belegen:
daten(i,j,k) = rnd*256
next k
next j
next i
end sub
sub speicherArray (daten() as ubyte, dateiname as string)
dim f as integer
f = freefile
open dateiname for output as #f
for i as integer = lbound(daten,1) to ubound(daten,1)
for j as integer = lbound(daten,2) to ubound(daten,2)
for k as integer = lbound(daten,3) to ubound(daten,3)
write #f, daten(i,j,k) 'Wert in Datei schreiben
next k
next j
next i
close #f
end sub
sub ladeArray (dateiname as string, daten() as ubyte)
dim f as integer
f = freefile
open dateiname for input as #f
for i as integer = lbound(daten,1) to ubound(daten,1)
for j as integer = lbound(daten,2) to ubound(daten,2)
for k as integer = lbound(daten,3) to ubound(daten,3)
if eof(f) then
close #f
print "Fehler! Das Dateiende wurde unerwartet erreicht. Die Datei ist zu kurz"
print "und enthaelt nicht genug Datensaetze fuer das Array!"
sleep: end
end if
input #f, daten(i,j,k) 'Wert aus Datei einlesen
next k
next j
next i
close #f
end sub
sub zeigGanzesArrayAn (zeilenanfang as string, daten() as ubyte)
for i as integer = lbound(daten,1) to ubound(daten,1)
for j as integer = lbound(daten,2) to ubound(daten,2)
print zeilenanfang & "(" & i & "," & j & ") = { ";
for k as integer = lbound(daten,3) to ubound(daten,3)
print str(daten(i,j,k));
if (k < ubound(daten,3)) then print ", ";
next k
print " }"
next j
next i
end sub