Gekoppelter-Reader (Liest Ini's, sowie Skripte)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

TheMatrix

Betreff: Gekoppelter-Reader (Liest Ini's, sowie Skripte)

BeitragSo, Nov 26, 2006 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich mitbekommen habe, dass viele oft ihre Optionen und Skripte in externe Dateien des Typs INI oder anderer auslagern, habe ich mir mal gedacht ich stelle hier einen gekoppelten Reader ins Codearcive, der beides mit einem Zug unterstützt.

Bei diesem gekoppelten Reader stehen viele Möglichekeiten offen, eine Ini-Datei, oder eine Skript Datei zu gestalten.

Ihr könnt beliebig viele Leerzeilen zwischen den einzelnen Befehlen setzen, Remarks setzen und eure Befehle mit Leerzeichen vom Rand wegversetzen. Leerzeichen sind auch zwischen Befehl und Wert erlaubt.

Wenn ihr eine Ini-Datei oder! auch ein Skript schreibt, dann könnt ihr zusätzlich noch verschiedene Sektionen bestimmen.

Befehle:
read_ini(datei,[sektion],[key]) Erwartet eine Datei zum auslesen und gibt so lange eine 1 zurück, wie noch Befehle in der Ini vorhanden sind. Existiert die Datei nicht, so gibt es eine Fehlermeldung.
Wird für Sektion etwas angegeben, so wird nur ein bestimmter Teil der Datei ausgelesen. Durch Angabe eines Schlüssels ist es möglich, nur einen bestimmten Wert auszugeben.

ini_befehl$ Hier wird immer der aktuell ausgelesene Befehl ausgelagert
ini_wert$ Das der dazugehörige Wert zum Befehl.

Die 4 Globalen Variabeln sind leider nötig, damit das ganze funktioniert.

Der Code: [AUSKLAPPEN]
Graphics 640,480,16,2
SetBuffer BackBuffer()

; - Die INI-Reader Variabeln -
Global ini_file$, ini_file_nr, ini_befehl$, ini_wert$, ini_sektion$

; --- Deine Programmschleife
While Not KeyHit(1)
 
  While read_ini("c:\test.ini","Der Skript","Steuerung")
   Print ini_befehl$ + " ist gleich = " + ini_wert$
  Wend

 Flip

Wend
; --- Ende der Programmschleife

; ---- Der Teil, der die Ini-Datei verwaltet
Function read_ini(file$, sektion$="", key$="")
  If FileType(file$)>0

  If file$<>ini_file$ Or sektion$<>ini_sektion$
    ini_file$ = file$ : ini_sektion$ = sektion$
    If ini_file_nr>0 Then CloseFile ini_file_nr
    ini_file_nr = ReadFile(file$)
    ; Es wird bis zur Sektion gelesen
    If sektion$<>""
    While Not Eof(ini_file_nr)
     st$ = Trim$(ReadLine$(ini_file_nr)) : st$ = Mid$(st$,2,Len(st$)-2)
     If st$ = sektion$
      f=1
      If key$<>"" Then find_key=1
      Exit
     End If
    Wend
    ; Fehlerausgabe, falls eine falsche Sektion oder gefunden wurde.
    If f=0 Then Locate 0,0 : Color 255,80,80 : Print "ERROR: SEKTION "+sektion$+" DOES Not EXIST" : ini_file_nr=0
    End If

  End If
 
 .ini_repeat
 If ini_file_nr>0
  st$ = readiniline$(ini_file_nr) : If st$ ="" Then ini_befehl$="" : ini_wert$="" : ini_file_nr=0 : Return 0
  ; Der Reader ist auf eine andere Sektion gestossen
  If Left$(st$,1)="["
   ; Wenn eine Sektion angegeben wird beendet
   If ini_sektion$<>"" Then ini_file_nr = 0 : ini_befehl$="" : ini_wert$="" : Return 0
   ; Wurde keine Sektion angegeben dann lese weiter aus
   If ini_sektion=""
    If Eof(ini_file_nr)=0 Then Goto ini_repeat Else ini_file_nr=0 : ini_befehl$="" : ini_wert$="" : Return 0
   Else
   End If
  End If

  For a=1 To Len(st$)
   If Mid$(st$,a,1)="=" Then ini_befehl$=Trim$(Left$(st$,a-1)) : ini_wert$=Trim(Right$(st$,Len(st$)-a)) : Exit
  Next

  If Eof(ini_file_nr) Then ini_file_nr=0
  If find_key=1
   If ini_befehl$ <> key$
    If Eof(ini_file_nr)=0 Then Goto ini_repeat
   Else
    ini_file_nr = 0 : Return 1
   End If
  End If

  Return 1
  End If
  Else
   Color 255,80,80 : Locate 0,0
   Print "INI FILE "+file$+" DOES NOT EXIST"
  End If
End Function

Function ReadIniLine$(datei)
 st$ = Trim$(ReadLine$(datei))

 ; Remarks überlesen
 While Left$(st$,1)="*" Or st$="" Or remstart=1 Or Left$(st$,2)="/*" Or Left$(st$,1)=";"
  If Mid$(st$,1,2)="/*" Then remstart=1
  If remstart=1 And (Left$(st$,2)="*/" Or Right$(st$,2)="*/") Then remstart=0
  If Eof(datei) Then Exit Else st$ = Trim$(ReadLine$(datei))
 Wend

 If Mid$(st$,1,1)="*" Then st$=""
 Return st$
End Function
; ---- Ende der Ini-Verwaltung


So könnte Beispielsweise eine Ini-Datei aussehen:
Code: [AUSKLAPPEN]

[Sektion1]
Option1     = Vollbild

; Jetzt kommt eine 2. Option

    Option2 = Demoversion
[Mauseinstellungen]
; Die Mausdarstellung
maus_bild = 0

; Ende


Ein Skript könnte nun so aussehen:
Code: [AUSKLAPPEN]

* Ein BeispielSkript
Leben = 1

Standard_name = Manu

/* Die Steuerung
Es gibt folgende Parameter
1. Maus
2. Joystick
3. Tastatur */

Steuerung = Maus

* So ,dass wars damit


Eine Ini und Skript in einem:
Code: [AUSKLAPPEN]

; Der Ini-Teil
[Optionen]
Vollbild = 1
Maus = 1
[Art]
Demo = 1

; Der Sktiptteil
*Jetzt gehts los!
[Der Skript]

Standarad_name = Manu
/* Die Steuerung
Es gibt folgende Parameter
1. Maus
2. Joystick
3. Tastatur */

Steuerung = Maus
* So, nun bin isch aber fertig:)
  • Zuletzt bearbeitet von TheMatrix am Mo, Nov 27, 2006 2:39, insgesamt 5-mal bearbeitet

BladeRunner

Moderator

BeitragSo, Nov 26, 2006 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist keine gültige .ini
Du solltest das Ganze umbenennen, denn den Zweck den Du mit dem Titel suggerierst erfüllt der Code nicht.
Zudem ist er (wie anderenorts festgestellt) aufgrund der Globalen etc. nicht sehr vorteilhaft.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

TheMatrix

BeitragSo, Nov 26, 2006 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
So, jetzt habe ich aber hoffentlich das Problem gelöst. Wenn ihr zufrieden damit seid, dann bitte ich euch um einen kurzen Kommentar.

mfg, TheMatrix

Edit:
Ich hatte noch die Option vergessen, wenn man exakt nur auf einen bestimmen Schlüssel innerhalb einer Sektion verweisen möchte. Dies wurde nun entsprechend gefixt.
°_° °.° °~° °v° .. -.-

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group