Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

uinteger, Uint32 und Dateizugriff

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 25.05.2006, 13:28    Titel: uinteger, Uint32 und Dateizugriff Antworten mit Zitat

Hallo!

Ich versuche derzeitig, die Hintergrundfarbe für ein Programm aus einer Datei auszulesen. Da SDL_FillRect keine SDL_Color, sondern ein Uint32(sprich uinteger) benötigt, hab mal mit SDL_MapRGB Schwarz und Weiß ausgeben lassen.
Ergebniss: Weiß=65535. Nun hab ich mir gedacht "Toll, das einfach in ne Datei packen", und zwar so:

Code:
SELECT CASE OPEN("Daten\optionen.pro" FOR INPUT AS #1)
CASE 0: 'Datei Konnte geoeffnet werden->Kein Problem
CASE 2:
    OPEN "Daten\option.pro" FOR BINARY AS #1
    WRITE #1, 0
    WRITE #1, 65535
    WRITE #1, 0
CASE ELSE:
    PRINT "Fehler"
END SELECT

CLOSE #1

(Sinn der Sache: falls die Datei nicht vorhanden ist, wird sie erstellt)

Wenn ich das gemacht habe, dacht ich mir, nur noch auslesen, also so:

Code:
DIM vollbild
DIM SHARED AS Uint32 farb_1, farb_2
INPUT #1, vollbild
INPUT #1, farb_1
INPUT #1, farb_2

Und schon hab ich die Farben zugewiesen. Falsch gedacht: farb_1(die Hintergrundfarbe) wird 0.

Kann mir jemand sagen, wieso das so ist, und wie ichs ändern kann?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 25.05.2006, 14:28    Titel: Antworten mit Zitat

Zitat:
SELECT CASE OPEN("Daten\optionen.pro" FOR INPUT AS #1)
CASE 0: 'Datei Konnte geoeffnet werden->Kein Problem
CASE 2:
OPEN "Daten\option.pro" FOR BINARY AS #1

Und:
Mach die Datei zu, wenn du weisst das sie nicht existiert.

Es hat noch ein paar Probleme, seh ich mir gelich genauer an.

Edit:/
Deklarier die Variabeln korrekt:
Code:
DIM SHARED farb_1 AS Uinteger
DIM SHARED farb_2 AS Uinteger
DIM SHARED vollbild AS Uinteger


Edit 2:
So geht es:
Code:
DIM SHARED farb_1 AS Uinteger
DIM SHARED farb_2 AS Uinteger
DIM SHARED vollbild AS Uinteger

SELECT CASE OPEN("Daten\optionen.pro" FOR INPUT AS #1)
CASE 0
    ? "Datei Konnte geoeffnet werden->Kein Problem"
CASE 2
    ? "Wird erstellt"
    CLOSE #1
    OPEN "Daten\optionen.pro" FOR Output AS #1
    ? #1, 0
    ? #1, 65535
    ? #1, 0
CASE ELSE:
    PRINT "Fehler"
END SELECT

CLOSE #1

OPEN "Daten\optionen.pro" FOR INPUT AS #1

INPUT #1, vollbild
INPUT #1, farbe_1
INPUT #1, farbe_2
? vollbild
? farbe_1
? farbe_2
sleep

_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 25.05.2006, 15:10    Titel: Antworten mit Zitat

@Michael Frey:
Die Variablen-Deklaration von Progger_X war schon korrekt.. zwinkern
@Progger_X:
Du hättest vielleicht noch eine Konstante/Variable für den DateiNamen benutzen
sollen, dann wäre das nicht passiert. grinsen
Ansonsten bin ich der Meinung von Michael Frey: Geöffnete Dateien nach Benutzung wieder schließen.
(Benutzung ist auch die Öffnung..)
..deshalb erspare ich es mir und euch meinen Code auch noch zu posten..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 25.05.2006, 16:43    Titel: Antworten mit Zitat

Hm...also bei mir stehen auch nach deinem Code drei Nullen da...

Was mir gerade auffällt: es steht immer da, das die datei neu erstellt wird, egal, ob sie schon da ist....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 25.05.2006, 17:29    Titel: Antworten mit Zitat

Hi,
du hast es ja nicht anders gewollt..
..und wo ist das Problem?
Code:
#include "windows.bi"
#include "defines.bi"
DIM vollbild
DIM SHARED AS Uint32 farb_1, farb_2
SELECT CASE OPEN("optionen.pro" FOR INPUT AS #1)
CASE 0: 'Datei Konnte geoeffnet werden->Kein Problem
  INPUT #1, vollbild
  ?"vollbild=";vollbild
  INPUT #1, farb_1
  ?"farb_1=";farb_1
  INPUT #1, farb_2
  ?"farb_2=";farb_2
CASE 2:
    OPEN "optionen.pro" FOR BINARY AS #1
    WRITE #1, 0
    WRITE #1, 65535
    WRITE #1, 0
    ?"Zum Lesen nochmal laufen lassen.."
CASE ELSE:
    PRINT "Fehler"
END SELECT

CLOSE #1
Sleep
..läuft bei mir einwandfrei..
(natürlich erst nach dem 2.Aufruf..)
Nörgelig, wie ich nun mal bin, habe ich beide Male DIESELBE
Datei benutzt, ich wollte keinen Dialog schreiben..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 25.05.2006, 18:53    Titel: Antworten mit Zitat

Komisch..

Mein veränderter Code:

Code:
DIM vollbild
DIM SHARED farb_1 AS Uint32
DIM SHARED farb_2 AS Uint32

SELECT CASE OPEN("Daten/optionen.pro" FOR INPUT AS #1)
CASE 0:
    PRINT "Vorhanden"
    INPUT #1, vollbild
    INPUT #1, farb_1
    INPUT #1, farb_2
    PRINT vollbild
    PRINT farb_1
    PRINT farb_2
CASE 2:
    CLOSE #1
    PRINT "Dateierstellung"
    OPEN "Daten/option.pro" FOR BINARY AS #1
    WRITE #1, 0: vollbild=0
    WRITE #1, 65535: farb_1=65535
    WRITE #1, 0: farb_2=65535
CASE ELSE:
    PRINT "Fehler"
END SELECT

CLOSE #1


Es kommt JEDES mal Dateierstellung, egal, ob die Datei da ist, oder nicht.(ich habe auch nachgeschaut, sie wird ordnungsgemäß erstellt). Kann mir bitte jemand sagen, woran das liegt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 25.05.2006, 19:22    Titel: Antworten mit Zitat

Halt deine Nase fest, es könnte sonst weh tun, wenn ich dich mit selbiger drauf stoße:
Progger_X hat Folgendes geschrieben:
SELECT CASE OPEN("Daten/optionen.pro" FOR INPUT AS #1)
und
Progger_X hat Folgendes geschrieben:
OPEN "Daten/option.pro" FOR BINARY AS #1
Ich hoffe, du verstehst jetzt, was ich weiter oben damit gemeint habe,
daß es sinnvoller ist, für Dateinamen Variablen zu benutzen vor lachen auf dem Boden rollen
[Edit]
Michael Frey hat das weiter oben auch sehr schön farblich gekennzeichnet..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 25.05.2006, 22:10    Titel: Antworten mit Zitat

mit dem Kopf durch die Mauer wollen
So was dummes mit dem Kopf durch die Mauer wollen
Danke, endlich hab ichs verstanden!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 25.05.2006, 22:13    Titel: Antworten mit Zitat

Ich verwend meistens keine variablen für dateinamen, aber ich KOPIERE sie in der ide - dadruch kann man auch verhindern, dass einer davon falsch ist durchgeknallt
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 25.05.2006, 22:40    Titel: Antworten mit Zitat

Progger_X hat Folgendes geschrieben:
Danke, endlich hab ichs verstanden!
hihihi, danke, selten so gelacht vor lachen auf dem Boden rollen
Du hattest deine Chance, Cowboy, seit Michael Frey's Posting..
..aber wir hauen ja nicht immer gleich mit dem Vorschlaghammer lachen
@jojo:
..und ich find Variablen für DateiNamen doch besser: Code ist einfacher zu warten..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz