INI datei auslesen ???

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

x_to

Betreff: INI datei auslesen ???

BeitragSo, Nov 26, 2006 1:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ich will gern ein INI datei mit einem texteditor erstellen im format:

scr_width=640
scr_height=512
scr_depth=16
.
.
.


die soll auch in zukunft mit einem txteditor editierbar sein...allerdings akzeptiert BB+ nicht die weise strings einzulesen...auch die werte werden logischerweise nicht korrekt gelesen...

hat jemand vorschläge wie man sowas unkompliziert lösen könnte..???

d-bug

BeitragSo, Nov 26, 2006 9:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, leider verstehe ich dein Problem nicht so recht. Natürlich kann man mit B+ Strings auf diese Weise einlesen. Ich hoffe doch du verwendest ql:ReadLine?! Nichts desto Trotz gibts hier einen ganz brauchbaren Ini-Parser im Codearchiv. Die Anleitung dazu gibt es hier. Der hat zwar nicht ganz meinen Geschmack getroffen, aber diente als Grundlage für meinen eigenen.

cheers
 

FBI-blitz

BeitragSo, Nov 26, 2006 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab auch mal so ne Function geschrieben ... Ist zwar etwas ineffizient da sie die Datei jedes mal öffnet und wieder schließt, man brauch tdafür aber nur eine Function.

Und für normale zwecke (wenns net grad n ini-benchmark werden soll) reichts vollkommen.

BlitzBasic: [AUSKLAPPEN]
Function read_ini_variable$(file_path$, variable$, section$="")
;Function um eine Variable aus einer INI-Datei zu lesen
Local file
Local line_content$
Local return_value$



file = OpenFile(file_path$)
;Datei öffnen
If section$ <> "" Then
;Wenn die Section nicht eingeklammert angegeben wurde, werden die Klammern hinzugefügt
If Left$(section$, 1) <> "[" Then section$ = "["+section$ ;ggf "[" hinzufügen
If Right$(section$, 1) <> "]" Then section$ = section$+"]" ;ggf "]" hinzufügen
Repeat
line_content$ = Trim$(ReadLine(file)) ;Alle Vorzeichen vor und hinter der Zeile entfernen
If line_content$ = section$ Then Exit ;Wenn die Section gefunden wurde, dann 0 zurückgeben
Until Eof(file)
EndIf


Repeat
line_content$ = Trim$(ReadLine(file))
If Left$(line_content$, Len(variable$)+1) = variable$+"=" Then
return_value$ = Mid$(line_content$, Len(variable$)+2)
Exit
EndIf
If Left$(line_content$, 1) = "[" Then Return 0 ;Wenn man auf eine neue Section stößt, ohne die Variable gefunden zu haben, dann Schleife verlassen
Until Eof(file)
CloseFile file
Return return_value$
End Function



Und es ist sogar völlig egal, ob du die Section mit oder ohne Klammern angibst Smile


Naja, wenn sie jemand braucht, bitte.

FBI

TheMatrix

BeitragSo, Nov 26, 2006 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich hab auch mal meinen Ini-FileReader ausgekramt. Vielleicht könnt ihr damit auch noch was anfangen. Der kann Remarks überlesen, hat mit Zeilenumbrüche keine Probleme und ignoriert auch alle Leerzeichen vor oder nach den Befehlen.

read_ini(Datei) Gibt immer solange eine 1 aus, wie sie brauchbare Daten in der Datei findet

ini_befehl$ = Enthält den nächsten Befehl aus der Datei
ini_wert$ = Ist der Wert des Befehls

Kurze Kommentare werden mit * angegeben
Lange Kommentare mit /* und */ beendete.

Hier mal der Code: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()

Global ini_file$, ini_file_nr, ini_befehl$, ini_wert$

While Not KeyHit(1)
 
  While read_ini("c:\test.ini")
   Print ini_befehl$ + " ist gleich = " + ini_wert$
  Wend
 Flip

Wend

Function read_ini(file$)
  If FileType(file$)>0

  If file$<>ini_file$
    ini_file$ = file$
    If ini_file_nr>0 Then CloseFile ini_file_nr
    ini_file_nr = ReadFile(file$)
  End If
  If ini_file_nr>0
  st$ = readl2$(ini_file_nr) : If st$ ="" Then ini_befehl$="" : ini_wert$="" : ini_file_nr=0 : Return 0

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

  If Eof(ini_file_nr) Then ini_file_nr=0
  Return 1
  End If
  Else
   Print "INI FILE DOESN'T EXIST"
  End If
End Function

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

 ; Remarks überlesen
 While Mid$(st$,1,1)="*" Or st$="" Or remstart=1 Or Left$(st$,2)="/*"
  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


Und so könnte eine Test.ini aussehen

Code: [AUSKLAPPEN]

Wert1=123123
Wert2=123123
* Eine Erinnerungszeile!
      Na was kommt nu?=13
hui=1233

/*
Wenn du viele Remarks hast, dann kannst du dich hier auslassen
*/

  blaaaa = 1342123


* So Ende der Vorstellung


Viel Spaß damit!

mfg, TheMatrix
°_° °.° °~° °v° .. -.-
 

FBI-blitz

BeitragSo, Nov 26, 2006 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@The Matrix:

Ich finde deine Version aus den folgenden Gründen nicht gut:
1. Globale Variablen - damit wird jedes große Projekt schnell unüberscihtlich und fehleranfälliger
2. das entspricht nicht dem, was der "Ini-Standard" vorschreibt.
Lies dir mal den folgenden Beitrag bei Wikipedia durch:
http://de.wikipedia.org/wiki/INI-Datei

3. Außerdem werden bei dir nicht mal Sektionen unterstützt. Das ist allerdings gerade einer der Hauptsachen der INI-Dateien

Noch ein kleiner schönheitsfehler: Das was in der INI-Datei steht sind um himmels Willen keine Befehle! Du weißt schon was Befehle sind, oder? Das sind eher Variablen...


Ich finde es schon sehr verwirrend, wenn du sowas INI-filereader nennst. Dann hast du das Prinzip der INI-Dateien wohl nicht ganz verstanden.
Grundsätzlich sollte man Standards einhalten - dazu sind sie ja da Wink
Da du fast keine der Standarts einhältst, ist es meiner Meinung nach sehr unverantwortlich, so etwas hier her zu posten und auch noch INI-Filereader zu nennen...
Computer 1: AMD Athlon64 3500+ | nVidia GF 7900GT | 1024 MB DDR-RAM | ASUS A8N-SLI Preimium | 250 GB SATA 2 || WindowsXP | Blitz3D | Blitz+
Computer 2: AMD AthlonXP 2400+ | ATI Radeon 9500 | 512 MB DDR-RAM | MSI K7N2 | 80 GB IDE | 160 GB IDE || WindowsXP | Blitz3D | Blitz+
Computer 3: Intel Pentium MMX | onBoard-Grafik | 32 MB RAM | 1 GB IDE || Windows 98 SE | Blitz+

TheMatrix

BeitragSo, Nov 26, 2006 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, du hast vollkommen recht. Das Problem habe ich gefixt und steht nun im Code-Archive unter https://www.blitzforum.de/foru...445#219445.

mfg,TheMatrix
°_° °.° °~° °v° .. -.-

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group