 |
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 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 11.12.2006, 04:59 Titel: Laden und Schreiben in eine .INI Datei durch Qbasic 4.5 |
|
|
Hallo!
Ich möchte ein Programm schreiben das in eine .INI Datei Werte speichert, die dann später wieder durch Qbasic 4.5 aufgerufen werden.
Ich möchte so ca. mehr als 10 Werte in einer .INI Datei abspeichern
Leider bekomme ich eine Fehlermeldung beim Laden der .INI Datei.
Code: |
Eingabe nach Dateiende
|
Code: |
Eine INPUT-Anweisung liest aus einer leeren Null - (leeren) Datei, aus der bereits sämtliche Daten gelesen wurden.
Verwenden sie die EOF-Funktion um das Dateiende zu ermitteln.
|
Ich glaube das liegt daran das eine Variable oder Wert null ist also zum Bsp. A = ""
Keinen Wert besitzt.
Speichern funktioniert aber laden nicht.
Ich wollte den Quellcode aufteilen in eine andere .BAS Datei über oder mit SHELL "STOP.EXE" aufrufen und habe mir überlegt wie weiß dann das zweite Programm die gespeicherten Werte vom ersten Programm?
Entweder ich speichere die Werte in eine Datei oder es gibt einen Befehl für mein Problem?
Eventuell COMMON SHARED?
Nur bekomme ich mit COMMON SHARED eine Fehlermeldung im ersten bzw. eine Fehlermeldung im zweiten Programm?
Unzulässiger Funktionsaufruf beim zweiten Programm!
Ich wollte eine CPRINT Anweisung laufen lassen um auf dem Bildschirm die ausgelosten Spieler anzeigen zu lassen.
Ich hoffe ihr könnt mir helfen?
Habe bereits um die 700 Zeilen Code. (Es werden ja noch mehr)
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 11.12.2006, 16:47 Titel: |
|
|
Poste mal bitte den fehlerhaften Code, da kann man so eher wenig zu sagen
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 12.12.2006, 00:43 Titel: |
|
|
Hallo!
So in etwa stelle ich mir das vor!
Code: |
PLAYE:
FELT 220, 60, 619, 420, 0
REM GOTO 100
STOP
OPEN "STOP.INI" FOR OUTPUT AS #1
D1$ = SPIELER$(1)
D2$ = SPIELER$(2)
D3$ = SPIELER$(3)
D4$ = SPIELER$(4)
D5$ = SPIELER$(5)
D6$ = SPIELER$(6)
D7$ = SPIELER$(7)
D8$ = SPIELER$(8)
D9$ = SPIELER$(9)
D10$ = SPIELER$(10)
D11$ = SPIELER$(11)
D12$ = SPIELER$(12)
D13$ = SPIELER$(13)
D14$ = SPIELER$(14)
D15$ = SPIELER$(15)
D16$ = SPIELER$(Q)
S1 = GESAMTSPIELER
S2 = RUNDE
S3 = XY
S4 = YX
S5 = ROUND
PRINT #1, D1$, D2$, D3$, D4$, D5$, D6$, D7$, D8$, D9$, D10$, D11$, D12$, D13$, D14$, D15$, D16$
PRINT #1, S1, S2, S3, S4, S5
CLOSE #1
T1 = A
T2 = B
T3 = C
T4 = D
T5 = E
T6 = F
T7 = G
T8 = H
T9 = I
T10 = J
T11 = K
T12 = L
T13 = M
T14 = N
T15 = O
'DIM SHARED GESAMTSPIELER
'DIM SHARED RUNDE
'DIM SHARED WO
'DIM SHARED S1
'DIM SHARED S2
'DIM SHARED S3
'DIM SHARED S4
'DIM SHARED S5
'DIM SHARED S6
'DIM SHARED S7
'DIM SHARED S8
'DIM SHARED S9
'DIM SHARED S10
'DIM SHARED S11
'DIM SHARED S12
'DIM SHARED S13
'DIM SHARED S14
'DIM SHARED S15
'DIM SHARED ROUND
'DIM SHARED GGG
'DIM SHARED WAS
SHELL "C:\STOP2.EXE"
RETURN
REM 100
IF GESAMTSPIELER = 3 THEN
IF ROUND = 1 THEN A = 1: B = 2: C = 3: W = Q
IF ROUND = 2 THEN A = 1: B = 3: C = Q: W = 2
IF ROUND = 3 THEN A = 2: B = 3: C = 1: W = Q
CPRINT SPIELER$(A) + " ", 10, YX, 15, 7, 8
CPRINT SPIELER$(B) + " ", 12, YX, 15, 7, 8
IF C = Q THEN CPRINT "- " + SPIELER$(C) + " ", 12, XY, 15, 13, 5 ELSE CPRINT "- " + SPIELER$(C) + " ", 12, XY, 15, 7, 8
IF W = Q THEN CPRINT "- " + SPIELER$(W), 10, XY, 15, 13, 5 ELSE CPRINT "- " + SPIELER$(W), 10, XY, 15, 7, 8
END IF
|
mit CPRINT sollen die ausgelosten Spieler angezeigt werden.
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 12.12.2006, 21:19 Titel: |
|
|
Also du solltest deinen Code mal ein bisschen optimieren
Code: |
' freien Kanal suchen und schreiben
F = FREEFILE
OPEN "STOP.INI" FOR OUTPUT AS #F
' Schreibarbeit sparen
FOR i = 1 TO 15 STEP 1
PRINT #F, SPIELER$(i),
NEXT i
PRINT #F, SPIELER$(Q)
PRINT #F, GESAMTSPIELER, RUNDE, XY, YX, ROUND
' Datei wieder schließen
CLOSE #F
|
So sollte das funktionieren... Zum Laden dann also:
Code: |
' freien Kanal suchen und schreiben
F = FREEFILE
OPEN "STOP.INI" FOR INPUT AS #F
' Schreibarbeit sparen
FOR i = 1 TO 15 STEP 1
INPUT #F, SPIELER$(i)
NEXT i
INPUT #F, SPIELER$(Q)
INPUT #F, GESAMTSPIELER, RUNDE, XY, YX, ROUND
' Datei wieder schließen
CLOSE #F
|
Sollte so klappen...
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 13.12.2006, 13:07 Titel: |
|
|
Hallo!
Mein Test ergab folgendes:
Speichern funktioniert einwandfrei aber beim laden kommt wieder die Fehlermeldung.
Code: |
Eingabe nach Dateiende
|
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 13.12.2006, 14:06 Titel: |
|
|
Hallo
Lass' mal bei jbs Beispiel in der Zeile PRINT #f, SPIELER$(i), das Komma am Ende weg, Dadurch werden sonst Leerfelder erzeugt, die beim Lesen fälschlicherweise als Dateiende erkannt werden. Dann müsste es gehen.
Code: | ' freien Kanal suchen und schreiben
F = FREEFILE
OPEN "STOP.INI" FOR OUTPUT AS #F
' Schreibarbeit sparen
FOR i = 1 TO 15 STEP 1
PRINT #F, SPIELER$(i), <----------------------------- Dieses Komma weglassen
NEXT i
PRINT #F, SPIELER$(Q)
PRINT #F, GESAMTSPIELER, RUNDE, XY, YX, ROUND
|
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 14.12.2006, 00:53 Titel: |
|
|
Hallo!
Es geht immer noch nicht.
Die Daten die aus der Datei gelesen werden sind 0 oder haben den Wert 0!
Wo liegt der Fehler?
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.12.2006, 02:10 Titel: |
|
|
Hallo
Das Beispiel von jb funktioniert bei mir einwandfrei wenn ich das Komma weglasse und noch ein DIM spieler$(15) davorsetze. Und da werden ja auch Nullen und leere Strings geschrieben. Wenn ich das richtig verstanden habe, willst du Daten von einem zum anderen Programm übertragen. Liegen die denn im selben Verzeichnis? Wenn nicht, musst du noch entsprechende Pfadangaben machen.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 14.12.2006, 02:55 Titel: |
|
|
Hallo!
Ich bring das Ding nicht zum laufen!
Immer wieder leer. Haben also den Wert 0.
Ja, Daten von einem Programm zum anderen.
Mal sehen ob ich einen Fehler finde!
Mit freundlichen Grüßen
ALWIM
edit:
LADEN
Code: |
DECLARE SUB CPRINT (FFTEXT$, FFHEIGHT!, FFWIDTH!, FFCOLOR1!, FFCOLOR2!, FFCOLOR3!)
SCREEN 12: DEFINT Z
WIDTH 80, 60
REM DIM SPIELER$(15)
'So sollte das funktionieren... Zum Laden dann also:
'Code:
' freien Kanal suchen und schreiben
F = FREEFILE
OPEN "STOP.INI" FOR INPUT AS #F
' Schreibarbeit sparen
LOCATE 1, 1: PRINT GESAMTSPIELER, RUNDE, XY, YX, ROUND
REM GESAMTSPIELER = 5
REM RUNDE = 5
REM ROUND = 1
REM XY = 53
REM YX = 30
FOR i = 1 TO 15 STEP 1
INPUT #F, SPIELER$(i)
NEXT i
INPUT #F, SPIELER$(Q)
INPUT #F, GESAMTSPIELER, RUNDE, XY, YX, ROUND
' Datei wieder schlieáen
CLOSE #F
|
SPEICHERN
Code: |
PLAYE:
FELT 220, 60, 619, 420, 0
REM GOTO 100
' freien Kanal suchen und schreiben
F = FREEFILE
OPEN "STOP.INI" FOR OUTPUT AS #F
' Schreibarbeit sparen
FOR i = 1 TO 15 STEP 1
PRINT #F, SPIELER$(i)
NEXT i
PRINT #F, SPIELER$(Q)
PRINT #F, GESAMTSPIELER, RUNDE, XY, YX, ROUND
' Datei wieder schlieáen
CLOSE #F
REM RETURN
REM SHELL "C:\STOP2.EXE"
|
_________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 14.12.2006, 16:44 Titel: |
|
|
Du solltest Pfadangaben verwenden, und da liegt auch der Fehler. Ein
Code: | OPEN "STOP.INI" FOR ... |
bringt nichts, da dein Programm nicht im aktuellen Verzeichnis liegen muss. Ein
Code: | OPEN "C:\Ordner\STOP.INI" ... |
ist da besser und viel weniger fehleranfällig.
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.12.2006, 22:30 Titel: |
|
|
OMG BLOSS NICHT NEIN!!!! KEINE ABSOLUTEN PFADE!
Das zwingt ja den user wieder, sein programm in ein bestimmtes verzeichnis zu kopieren. und wenn es etwas gibt, das ich hasse, dann ist es das. denn auf meiner festplatte hat alles seine ordnung. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.12.2006, 01:57 Titel: |
|
|
Hallo!
Jetzt klappt es so wie ich will.
Nun kann ich auch eine Abspeichern Routine programmieren.
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
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.
|
|