Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Mehrdimensionales Array in Textdatei speichern und daraus auslesen

Uploader:AdministratorSebastian
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