Ini-Dateien

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

girgl

Betreff: Ini-Dateien

BeitragMo, März 22, 2004 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,kann man mit BlitzBasic ini-dateien erstellen und aus ihnen daten auslesen?Wenn ja,kann einer mal beschreiben wie sowas geht?

theBlade

BeitragMo, März 22, 2004 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
nutze Code: [AUSKLAPPEN]
WriteFile
und Code: [AUSKLAPPEN]
ReadFile
"Ich bin wie ich bin. Die einen kennen mich, die anderen können mich." (Dr. Konrad Adenauer)

UTFSB -> (use the fuckin "suchen"-button)

User posted image <- link -.-

General Alex

BeitragMo, März 22, 2004 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
In BlitzBasic kannst du alle möglichen Dateien erstellen und alle möglichen Dateiformate lesen, vorrausgesetzt, du hast sie mit BB oder dem Editor erstellt und sie nicht irgendwie verschlüsselt mit etwas anderem als BB.

Markus2

BeitragMo, März 22, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal eine Sinnvolle Antwort Wink

Code: [AUSKLAPPEN]


 ; MR 06.01.2003

 ; Example usage:

 ;Print "INI Value = " + ReadINIValue("Archon", "Video", "Resolution", "800x600")
 ;bSuccess% = WriteINIValue("Archon", "Audio", "Music", "0")

 Function ReadINIValue$(sAppName$, sSection$, sKey$, sDefault$)

 ; Returns: INI Value (String) - The sDefault value is returned if no SECTION/KEY combination is found

     sSection = "[" + Upper$(Trim$(sSection)) + "]"
     sKey = Upper$(Trim$(sKey))

     sFilename$ = CurrentDir$() + "\"  + sAppName + ".ini"

 ; Retrieve the INI data

     sINI$= FileToString(sFilename)
     sUpperINI$ = Upper$(sINI) ; Speed up checks below

 ; Locate the SECTION, KEY and VALUE

     sValue$ = ""

     lSectionPos% = Instr(sUpperINI, sSection)
     If (lSectionPos <> 0) Then
         lKeyPos% = Instr(sUpperINI, sKey, (lSectionPos + Len(sSection) + 1))
         If (lKeyPos <> 0) Then
           Local nextSection=Instr(sUpperINI, "[", (lSectionPos + Len(sSection) + 1))
           If nextSection=0 Or (nextSection=>1 And lKeyPos<nextSection)
             lStartPos% = Instr(sUpperINI, "=", (lKeyPos + 1))
             If (lStartPos <> 0) Then
                 lEndPos% = Instr(sUpperINI, Chr$(0), (lStartPos + 1))
                 If (lEndPos <> 0) Then
                     ; We have located the required INI VALUE!
                     sValue = Trim$(Mid$(sINI, lStartPos + 1, (lEndPos - lStartPos - 1)))
                     ; Now remove any leader/trailer quotes (") - ** OPTIONAL **
                     ;If Left$(sValue, 1) = Chr$(34) Then sValue = Mid$(sValue, 2)
                     ;If Right$(sValue, 1) = Chr$(34) Then sValue = Mid$(sValue, 1, (Len(sValue) - 1))
                 End If
             End If
           EndIf ;KEY must inside section  !
         End If
     End If

 ; Return the value

     If (sValue <> "") Then Return sValue Else Return sDefault

 End Function

 Function WriteINIValue%(sAppName$, sSection$, sKey$, sValue$)

 ; Returns: True (Success) or False (Failed)

     sSection = "[" + Trim$(sSection) + "]"
     sUpperSection$ = Upper$(sSection)

     sKey = Trim$(sKey)
     sValue = Trim$(sValue)

     sFilename$ = CurrentDir$() + "\"  + sAppName + ".ini"

 ; Retrieve the INI data (if it exists)

     sINI$= FileToString(sFilename)

 ; (Re)Create the INI file updating/adding the SECTION, KEY and VALUE

     bWrittenKey% = False
     bSectionFound% = False
     sCurrentSection$ = ""

     f = WriteFile(sFilename)
     If f = 0 Then Return False ; Create file failed!

     lOldPos% = 1
     lPos% = Instr(sINI, Chr$(0))

     While (lPos <> 0)

         sTemp$ =Trim$(Mid$(sINI, lOldPos, (lPos - lOldPos)))
         
         If (sTemp <> "") Then

             If Left$(sTemp, 1) = "[" And Right$(sTemp, 1) = "]" Then

                 ; Process SECTION

                 If (sCurrentSection = sUpperSection) And (bWrittenKey = False) Then
                     bWrittenKey = CreateINIKey(f, sKey, sValue)
                 End If
                 sCurrentSection = Upper$(CreateINISection(f, sTemp))
                 If (sCurrentSection = sUpperSection) Then bSectionFound = True

             Else

                 ; KEY=VALUE

                 lEqualsPos% = Instr(sTemp, "=")
                 If (lEqualsPos <> 0) Then
                     If (sCurrentSection = sUpperSection) And (Upper$(Trim$(Left$(sTemp, (lEqualsPos - 1)))) = Upper$(sKey)) Then
                         If (sValue <> "") Then CreateINIKey f, sKey, sValue
                         bWrittenKey = True
                     Else
                         WriteLine f, sTemp
                     End If
                 End If

             End If

         End If

         ; Move through the INI file...

         lOldPos = lPos + 1
         lPos% = Instr(sINI, Chr$(0), lOldPos)

     Wend

     ; Section wasn't found in the INI file - Append a new SECTION and create our KEY=VALUE line

     If (bWrittenKey = False) Then
         If (bSectionFound = False) Then CreateINISection f, sSection
         CreateINIKey f, sKey, sValue
     End If

     CloseFile f

     Return True ; Success

 End Function

 Function FileToString$(sFilename$)

     sString$ = ""

     f% = ReadFile(sFilename)
     If f <> 0 Then
         While Not(Eof(f))
             sString = sString + ReadLine$(f) + Chr$(0)
         Wend
         CloseFile f
     End If

     Return sString

 End Function

 Function CreateINISection$(f%, sNewSection$)

     If FilePos(f) <> 0 Then WriteLine f, "" ; Blank line between sections
     WriteLine f, sNewSection
     Return sNewSection

 End Function

 Function CreateINIKey%(f%, sKey$, sValue$)

     WriteLine f, sKey + "=" + sValue
     Return True

 End Function

Travis

BeitragMo, März 22, 2004 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also eine INI-Datei dient ja dazu, dem Programm zu dem sie gehört Variablen zu liefern.

Wenn man z.B. ein Spiel hat, könnte dort drin stehen, welcher Menüpunkt im Hauptmenü vorgewählt ist oder welches Farbschema verwendet wird. So kann man verschiedene Einstellungen, die man im Programm vornimmt abspeichern, damit sie beim nächsten start nicht verloren gehen.

Das ist ja der Sinn von INI-Dateien. Und jetzt musst du dir halt überlegen, welche Variablen du sichern willst und musst sie abspeichern.

Hier mal ein Beispiel aus meinem Snakespiel:

Code: [AUSKLAPPEN]

; --- Konfiguration laden ---
Function LoadConfig()

 File = OpenFile("Game.dat")

 If Not File = 0 Then
  Datei = ReadFile("Game.dat")
 
   For i = 0 To 3
    Highscore(i) = ReadShort(Datei)
   Next

   Level = ReadByte(Datei)
   Speed = ReadByte(Datei)
 
  CloseFile Datei
 EndIf


 If File = 0 Then
  For i = 0 To 3
   Highscore(i) = 0
  Next

  Level = 0
  Speed = 30
 EndIf

End Function
; --- Konfiguration laden ---



; --- Konfiguration speichern ---
Function SaveConfig()
 Datei = WriteFile("Game.dat")
  For i = 0 To 3
   WriteShort Datei, Highscore(i)
  Next

  WriteByte Datei, Level
  WriteByte Datei, Speed
 CloseFile Datei
End Function
; --- Konfiguration speichern ---


Die Datei die ich verwende heisst zwar "Game.dat", ist aber im Prinzip auch eine INI-Datei. Hier wird die zuletzt verwendete Spielgeschwindigkeit, der Level und auch die Highscores des Spiels gespeichert und beim Neustart wieder geladen.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Edlothiol

BeitragMo, März 22, 2004 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Showcase von BlitzCoders gibts gleich mehrere Bibliotheken zum Lesen von INIs.

BBPro

BeitragMo, März 22, 2004 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
@travis
eine ini datei dient allerdings auch dazu dass ziemlich jeder die daten über nen normalen editor ändern ann und zwar so dass er auch weis was er ändert.
so dass da dann z.B. steht "BlutPartikel = 400"
das wäre in deinem fall aber nicht der fall - ist also keine ini datei sondern einfach gesicherte daten.
cu

Travis

BeitragMo, März 22, 2004 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, schon klar. Man muss sich halt überlegen, wofür man das braucht.

Wenn man per Texteditor Änderungen vornehmen will, muss man es natürlich etwas aufwendiger machen.

Code: [AUSKLAPPEN]

; Speichern
WriteLine Datei, "Geschwindigkeit =" + Speed

; Laden
Speed$ = ReadLine(Datei)
Speed = Mid(Speed$, 19, 2)


@ Edlothiol
Muss eine INI-Datei nicht immer an das Programm angepasst sein. Wie kann man da allgemeine Lösungen entwerfen? Da würde ich doch lieber dazu raten ein eigenes Format zu entwickeln.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Edlothiol

BeitragMo, März 22, 2004 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, eigentlich denke ich dass eine INI - Datei immer das Format
Code: [AUSKLAPPEN]
[Sektion 1]
name=wert
name2=wert2
; Kommentar
hat. Oder nicht? Ich komme auf jeden Fall ganz gut damit zurecht.
 

ChristianH

BeitragDi, März 23, 2004 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ini Dateien sind ideal zum Speichern von Daten. In BlitzEdit benutze ich fast nur Ini-Dateien.
 

girgl

BeitragDi, März 23, 2004 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
TheBlade,deine dumme antwort hättest dir auch in dein fettn hintern stecken können.

@Edlothiol yo genau so ein format mein ich

danke schon mal an alle für die antworten,werde mal ein bischen probieren

Hacky

Betreff: @ Markus2

BeitragDi, März 23, 2004 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich nehm alles zurück!
www.tidosoft.de.vu <-- Besuch uns!!
  • Zuletzt bearbeitet von Hacky am Mi, März 24, 2004 13:16, insgesamt einmal bearbeitet
 

graythread

BeitragDi, März 23, 2004 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wenn du deinen Post für sinnvoll hälst, dann fass du es doch mal zusammen.

Und außerdem find ich auch den Quellcode von Half Live voll viel zu lang und blöd, kann mir das einer mal auf 2 Zeilen bitte bringen Wink

Markus2

BeitragMi, März 24, 2004 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
@Hacky
Der Source wurde nur von mir verbesesrt und erfüllt jetzt seinen Zweck .
Wenn du meinst das du ihn zusammenfassen kannst und er danach
noch läuft kannste ihn ja verschönern und ins Code Archiv hier stellen .
[/quote]
 

[SHM]StArMaStEr

BeitragMi, März 24, 2004 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@girgl: die antwort von theBlade war nich dumm nur du bist es wenn du sie abweist. er hat dir mit den befehlen nur einen denkanstoß gegeben mit welchen befehlen du in eine datei schreiben kannst oder auslesen kannst. wieso sollte er dir einen kompletten code geben den vielleicht nichma verstehen würdest. und wie is das sprichwort nochma??

ich glaub "SELBST IS DER MANN"
BB-coden was das Zeug hällt!!!!
 

HOT-BIT

Gast

BeitragMi, März 24, 2004 15:19
Antworten mit Zitat
Oooops,

da staun ich aber !

Schau, schau, da hat wer was gelernt ! Smile

Toni
 

girgl

BeitragMi, März 24, 2004 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@[SHM]StArMaStEr
Auf die idee,dass ich irgendwann mal writefile und readfile benutzen muss,wär ich selber scho auch noch gekommen...code ja nich erst seit paar tagen
Von Code war auch nicht die Rede,oder hab ich irgendwo einen verlangt?
Mir gings ledeglich darum,das smir einer des prinzip erklärt,wie es geht,eine datei der Form

[Bla]
so x
und y
so z

auszuwerten.
Was is mir das dann für eine Hilfe,wenn jemand schreibt benutze writefile und readfile..WOW !!! JETZ WEISS ICH WIES GEHT DANKE !!!

ok..mag sein,dass er wirklich versucht hat zu helfen,so wie ich den post hier interpretiert hab,klang des für mich aber eher wie ne verarsche.
Falls dem nicht so sei bedaure ich das natürlich zutiefst und bitte um verzeihung Wink ,aber ein bischen konstruktivere beiträge wären schon auch nicht schlecht...
 

dubitat

BeitragMi, März 24, 2004 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
jede normale highscore is so geschrieben wie travis das gemacht hat! und jetzt mal ehrlich:

Code: [AUSKLAPPEN]

[überkategorie1]
wert1=a
wert2=b


wer brauch die überkategorie? naja bei spielen wie halflife, wo viele einstellungen so gespeichert werden, ist es nützlich aber ich glaub nicht das du über eine bildschirmseite schaffst bei einem selbstgecodeten spiel!
Erare humanum est - Irren ist Menschlich

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group