 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
hunggar
Anmeldungsdatum: 04.08.2008 Beiträge: 32 Wohnort: Karlsruhe
|
Verfasst am: 18.09.2008, 09:41 Titel: Variablen in einer txt abspeichern und wieder abrufen |
|
|
Hallo Programmierfreunde,
da ich über längere Zeit, und auch, wenn der PC zwischenzeitlich aus ist, etliche Variablen verwalten möchte,
brauche ich eine Möglichkeit, diese in einer z.B. txt-Datei abzuspeichern,
damit ich sie von dort jederzeit wieder einlesen kann.
Ich habe aber keine Ahnung, wie sowas geht.
In der Referenz sind Tutorials zu dem Thema, aber ich muss leider zugeben :
Ich habe nix verstanden.
Ich versuche mal zu beschreiben, was jetzt bei mir angekommen ist von den ganzen Informationen aus der Referenz :
Mit der Anweisung OPEN und der Angabe von ACCESS und Dateimodus kann ich ich auf andere Dateien zugreifen, sowohl lesen als auch schreiben.
Wenn ich richtig verstanden habe, kann ich aber nicht einzelne Variablen in dieser Datei überschreiben,
sondern muss immer alles, was in der Datei stehen soll, komplett neu hineinschreiben lassen.
Da ich wirklich nicht verstanden habe, wie ich meine Variablen in die Datei hinein und von dort wieder in den Arbeitsspeicher bringe,
wäre ich froh um Code-Sequenzen, die ich direkt ausprobieren kann ...
Mein Beispiel (fiktiv):
Ich habe 80 Mitarbeiter, deren Gehalt, Resturlaub und Stundenkonto ich per Variablen abspeichern und wieder auslesen will.
Im Hauptprogramm bearbeite ich diese Variablen immer per FOR-NEXT-Schleife:
Code: | For i = 1 to 80
Gehalt(i) und jetzt kommt irgendwas
Urlaub(i) und jetzt kommt irgendwas
Stunden(i) und jetzt kommt irgendwas
Next |
( ... könnte sein, dass das etwas umständlich ist, spielt aber im Moment keine Rolle, ich bin ja erst noch am Lernen)
Jetzt also konkret :
Wie kann ich diese 3 x 80 Variablen abspeichern und wieder auslesen ?
Danke für Eure Geduld beim Lesen und Mitdenken ...
HungGar |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 18.09.2008, 13:24 Titel: |
|
|
Hi,
versuch es einmal so. Natürlich musst du erst einmal die Daten Speichern bevor du sie einlesen kannst
Code: | Declare Sub lade_daten (filename As String)
Declare Sub speicher_daten (filename As String)
Dim Shared As Integer Gehalt(1 To 80), Urlaub(1 To 80), Stunden(1 To 80)
lade_daten ("meineDaten.dat")
'dein Programm
'..
speicher_daten ("meineDaten.dat")
end
Sub lade_daten (filename As String)
Dim As Integer i, ff= FreeFile
Open filename For Input As #ff
For i = 1 To 80
Input #ff, Gehalt(i) 'und jetzt kommt irgendwas
Input #ff, Urlaub(i) 'und jetzt kommt irgendwas
Input #ff, Stunden(i) 'und jetzt kommt irgendwas
Next
Close #ff
End Sub
Sub speicher_daten (filename As String)
Dim As Integer i, ff= FreeFile
Open filename For Output As #ff
For i = 1 To 80
Print #ff, Gehalt(i) 'und jetzt kommt irgendwas
Print #ff, Urlaub(i) 'und jetzt kommt irgendwas
Print #ff, Stunden(i) 'und jetzt kommt irgendwas
Next
Close #ff
End Sub |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 18.09.2008, 21:48 Titel: |
|
|
Optimaler wäre natürlich folgendes:
Code: | Type TMitarbeiter
Gehalt As Double
Urlaub As Double
Stunden As Double
End Type
Dim Shared Mitarbeiter(1 To 80) As TMitarbeiter
Sub Speichern(Datei As String)
Var ff = FreeFile
Open Datei For Binary As #ff
Put #ff, , Mitarbeiter()
Close #ff
End Sub
Sub Laden(Datei As String)
Var ff = FreeFile
Open Datei For Binary As #ff
Get #ff, , Mitarbeiter()
Close #ff
End Sub
' ############## Test!
Mitarbeiter(1).Gehalt = 1000
Mitarbeiter(1).Urlaub = 37.5
Mitarbeiter(1).Stunden = 40
Mitarbeiter(2).Gehalt = 2000
Mitarbeiter(2).Urlaub = 55
Mitarbeiter(2).Stunden = 45
Speichern("test.dat")
Laden("test.dat")
Print "Mitarbeiter 1:"
Print "Gehalt: " & Mitarbeiter(1).Gehalt
Print "Urlaub: " & Mitarbeiter(1).Urlaub
Print "Stunden: " & Mitarbeiter(1).Stunden
Print
Print "Mitarbeiter 2:"
Print "Gehalt: " & Mitarbeiter(2).Gehalt
Print "Urlaub: " & Mitarbeiter(2).Urlaub
Print "Stunden: " & Mitarbeiter(2).Stunden
Sleep
|
|
|
Nach oben |
|
 |
hunggar
Anmeldungsdatum: 04.08.2008 Beiträge: 32 Wohnort: Karlsruhe
|
Verfasst am: 18.09.2008, 23:50 Titel: |
|
|
Ich habe jetzt beide Versionen ausprobiert.
Mit beiden habe ich das Problem, dass die Variablen nicht angenommen werden.
(kanns leider nicht besser beschreiben)
Beim zweiten Beispiel habe ich im gesamten Programm alle Variablen der neuen Schreibweise angepasst,
aber dann zig Fehlermeldungen bekommen.
Beim ersten Beispiel habe ich nur wenige Fehlermeldungen, und zwar immer Folgende:
test03.bas(3571) error 41: Variable not declared, Gehalt in 'PRINT #ff, Gehalt(i)'
test03.bas(3571) warning 12(0): Implicit variable allocation, Gehalt
Was bedeutet in diesem Falle declare ?
Und was läuft hier schief ?
Der Code dazu:
Code: | SUB speicher_daten (filename AS STRING)
Dim ff As Integer
Dim i As Integer
ff= FREEFILE
OPEN filename FOR OUTPUT AS #ff
FOR i = 1 TO 80
PRINT #ff, Gehalt(i)
NEXT
CLOSE #ff
END SUB |
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 19.09.2008, 10:22 Titel: |
|
|
Beide Fehlermeldungen deuten an, dass im Unterprogramm (SUB) die Variable (oder das Array) "Gehalt" nicht bekannt ist.
Wenn man auf Variable in Subs zugreifen möchte, die im Hauptprogramm dimensioniert wurden, muss man diese Dimensionierung mit dem Begriff "SHARED" versehen.
D.h. am Anfang deines Programms sollte Code: | Dim Shared As Integer Gehalt(1 To 80) | stehen. Damit wird das Array deklariert (angemeldet). _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
hunggar
Anmeldungsdatum: 04.08.2008 Beiträge: 32 Wohnort: Karlsruhe
|
Verfasst am: 19.09.2008, 23:40 Titel: |
|
|
Danke,
jetzt funktionierts.
 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|