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:

INCLUDE-Datei ändern ohne neu kompilieren zu müssen

 
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
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 25.02.2013, 18:54    Titel: INCLUDE-Datei ändern ohne neu kompilieren zu müssen Antworten mit Zitat

Hallo,
ich habe ein Spiel programmiert und der Übersicht halber habe ich die Anfangswerte für einen Großteil der Variablen in eine .bi Datei augelagert. Nehme ich nun Änderungen an dieser Datei vor, muss ich das Spiel immer neu kompilieren, damit die neuen Werte berücksichtigt werden.

Meine Frage ist nun folgende:
Wie kann ich erreichen, dass sämtliche Variablen aus der Datei bei jedem Start eingelesen werden, ich bei Änderungen also nicht immer das Spiel neu kompilieren muss. Ich dachte da an etwas in Richtung dieser Config-Dateien (.cfg), nur habe ich leider keine Ahnung, wie ich so eine Datei nun ohne viel Aufwand aus meiner jetzigen Include-Datei machen kann (es sind hunderte Variablen darin festgelegt) und in das Programm einbinden kann.
Bin für jede Hilfe dankbar!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 25.02.2013, 19:19    Titel: Antworten mit Zitat

Include Dateien sind ja im Prinzip nichts anderes als ausgelagerter Quellcode, der beim compilieren einfach in den inkludierenden Code rein kopiert wird. Also damit wirst du dein Problem nicht lösen können.

Du musst die Daten zur Laufzeit einlesen. Das funktioniert ganz normal wie der Zugriff auf jede andere Datei mit den eingebauten Befehlen wie etwa OPEN, GET, (LINE) INPUT, PUT und CLOSE. Wenn du dir den Code zum (de)serialisieren (die Einstellungen in ein bestimmtes Format bringen) nicht selber schreiben willst, hast zu z.B. INI oder XML zur Auswahl, für die es bereits fertigen Code, der solche Dateien lesen und schreiben kann.

Für INI z.B.: das oder das oder dieses (mit WinAPI).

Für XML z.B. der Code von nemored, der u.A. in diesem Projekt verwendet wird: wxFBE (Link zum SVN repo)
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 25.02.2013, 19:41    Titel: Antworten mit Zitat

Du kannst auch mdLanguage "missbrauchen" - da werden letztlich Schlüsselpaare key/value angelegt, und du kannst bequem zu jedem Schlüssel den Wert abfragen. Bei meinem monopolZ mache ich im Prinzip dasselbe, nur ohne Makros und linked list und zielgerichtet auf meinen speziellen Anwendungsfall.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 25.02.2013, 19:42    Titel: Antworten mit Zitat

Gibt es denn die Möglichkeit, eine eingelesene Zeile als Code zu interpretieren?

Also wenn in der Include
Code:

vmax = 50


steht und selbiges als String eingelesen wird, soll der String als Codezeile interpretiert und demzufolge die Variable 'vmax' auf '50' gesetzt werden, so , als wenn die Zeile im Code selber stehen würde. Ist das möglich?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 25.02.2013, 19:51    Titel: Antworten mit Zitat

Prinzipiel ja, aber der aufwand, den du hier betreiben müsstest, würde wohl ein eigenes neues Projekt schaffen. Da ist alles andere als "mal eben" zu realiseren.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 25.02.2013, 19:57    Titel: Antworten mit Zitat

Schade, denn genau das bräuchte ich! Alles andere wäre doch recht aufwendig. Aber nun weiß ich jedenfalls, was möglich ist und was nicht. Danke und einen schönen Abend!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 25.02.2013, 20:06    Titel: Antworten mit Zitat

Was ist denn das ziel, das du damit erreichen möchtest? .. es muss ja nicht zwingend unbedingt so extrem sein, um eventuell das zu erreichen, was du brauchst.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 25.02.2013, 20:26    Titel: Antworten mit Zitat

Das Ziel ist, den Variablen Werte zuzuweisen, ohne dass ich das im Code für jeden Variablennamen nochmals im einzelnen tun muss (wie gesagt, es sind viele hundert!). Denn genau das steht ja eigentlich alles schon in der Include, darum wäre es ideal, wenn sie wie Code gelesen werden könnte aber eben zur Laufzeit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 25.02.2013, 20:32    Titel: Antworten mit Zitat

man könnte dir noch volgendes empfehlen:

Code:

Dim Var1 as String
Dim Var2 as UInteger
Dim Var3 as UByte


Sub ReadVars()
Dim TFN as Integer = FreeFile
Open "myvar.txt" for Binary as #TFN
Dim T as String
Dim T1 as String
Dim XPos as Integer
Do
   Line Input #TFN, T
   XPos = InStr(T, 1, "=")
   T = Trim(T)
   If XPos > 0 Then
      T1 = Mid(T, XPos + 1)
      Select Case LCase(Left(T, XPos - 1))
         Case "var1"         : Var1 = T1
         Case "var2"         : Var2 = CUInt(T1)
         Case "var3"         : Var3 = CUByte(T1)
      End Select
   End If
Loop
Close #TFN
End Sub



ReadVars()
Print Var1
Print Var2
Print Var3



Das ist doch nun wirklich easy.

du musst in der config-datei welche "myvar.txt" heist, jetzt nur foglende Daten Eintragen

Code:

Var1=Hallo
Var2=12345678
Var3=123



[EDIT]
Im Übrigen musst du es mal so sehen. Wenn der Code in deiner Datei "interpretiert" werden würde, wäre es ein leichtest für hacker, dort alles mögliche rein zu schreiben, und damit dein system zu kompromitieren.

oder,
wenn du einen klitzekleinen fehler in der datei rein baust, dann kännte dein prob kraschen.


Oder, was mein Nachredner vorgeschlagen hat. Aber ob sich sowas lohnt?!?



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]


Zuletzt bearbeitet von ThePuppetMaster am 25.02.2013, 20:34, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 25.02.2013, 20:32    Titel: Antworten mit Zitat

Dann musst du einen Interpreter in deinem Code schreiben, der alle Befehle beherrscht, die du für dein Vorhaben brauchst. Das ist allerdings sehr viel Aufwand.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 25.02.2013, 23:53    Titel: Antworten mit Zitat

steini hat Folgendes geschrieben:
Das Ziel ist, den Variablen Werte zuzuweisen, ohne dass ich das im Code für jeden Variablennamen nochmals im einzelnen tun muss (wie gesagt, es sind viele hundert!). Denn genau das steht ja eigentlich alles schon in der Include, darum wäre es ideal, wenn sie wie Code gelesen werden könnte aber eben zur Laufzeit!

Du kannst auch mdLanguage "missbrauchen" - da werden letztlich Schlüsselpaare key/value angelegt, und du kannst bequem ... oh, hoppla, das habe ich ja schon mal geschrieben ...
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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