*.ini Dateien auslesen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

das wurgel

Betreff: *.ini Dateien auslesen

BeitragMo, Mai 25, 2009 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Ich hab zwei Funktionen geschrieben mit denen man ini-dateien auslesen, schreiben und berteits vorhandene ini-dateien verändern kann. Fehlende Gruppen und Felder werden automatisch erstellt. Sie machen genau das selbe wie die Funktionen DLLGet- und WritePrivateProfileString$ von der blitzsys.dll.

Code: [AUSKLAPPEN]
Function ReadFromINI$(inifile$, section$, key$)   
   Local file=ReadFile(inifile$)
   Local section2$
   Local gleichheitszeichen
   Local zeile$
   If file=0 Then Return ""
   While Not Eof(file)
      zeile$=TrimLeft$(ReadLine(file))
      eckige_klammer_zu=Instr(zeile$, "]")
      bla=Instr(zeile$, "[")=1
      If Instr(zeile$, "[")=1 Then If eckige_klammer_zu Then
         section2$=Mid(zeile$, 2, eckige_klammer_zu-2)
      EndIf
      gleichheitszeichen=Instr(zeile$, "=")
      If gleichheitszeichen Then If section$=section2$ Then If Lower$(Mid(zeile$, 1, gleichheitszeichen-1))=Lower$(key$) Then
         CloseFile file : Return Mid$(zeile$, gleichheitszeichen+1, -1)
      EndIf
   Wend
   CloseFile file
   Return ""
End Function

Function WriteToINI$(inifile$, section$, key$, value$)
   Local file=ReadFile(inifile$)
   Local section2$
   Local key2$
   Local gleichheitszeichen
   Local z.zeile
   Local tha_key$
   Local found=0
   If file Then
      While Not Eof(file)
         zeile$=TrimLeft$(ReadLine(file))
         z.zeile=New zeile
         z\inhalt$=Mid$(zeile$, gleichheitszeichen+1, -1)
      Wend
      CloseFile file
   EndIf
   file=WriteFile(inifile$)
   For z.zeile = Each zeile
      eckige_klammer_zu=Instr(z\inhalt$, "]")
      If Instr(z\inhalt$, "[")=1 Then If eckige_klammer_zu Then
         If section2$=section$ Then If Not found Then WriteLine file, key$+"="+value$
         section2$=Mid(z\inhalt$, 2, eckige_klammer_zu-2)
      EndIf
      gleichheitszeichen=Instr(z\inhalt$, "=")
      key2$=Mid(z\inhalt$, 1, gleichheitszeichen-1)
      If gleichheitszeichen Then If section$=section2$ Then If Lower$(key$)=Lower$(key2$) Then
         z\inhalt$=key2$+"="+value$
         found=True
      EndIf
      WriteLine file, z\inhalt$
   Next
   If (Not found) Or First zeile = Null Then
      If section2$<>section$ Then WriteLine file, "["+section$+"]"
      WriteLine file, key$+"="+value$
   EndIf
   CloseFile file
   Delete Each zeile
End Function

Function TrimLeft$(schdr$)
   Local i
   Local length=Len(schdr$)
   Local letter
   For i = 1 To length
      letter=Asc(Mid(schdr$, i, 1))
      If letter<>32 And letter<>9 Then
         Return Mid(schdr$, i, -1)
      EndIf
   Next
   Return ""
End Function

Type zeile
   Field inhalt$
End Type


mfg

edit:
Upps da war ein stop drin Confused
Ich habs entfernt.

edit2:
Und nen bug in WriteToINI hab ich auch noch enfernt^^
Jetzt müsste es funktionuggeln


edit3:
Die funktion und der type sind jetzt auch mit drin Embarassed Very Happy
  • Zuletzt bearbeitet von das wurgel am Do, Mai 28, 2009 13:53, insgesamt einmal bearbeitet
 

n-Halbleiter

BeitragMo, Mai 25, 2009 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, das ist gut. Ich habe mich damit in letzter Zeit auch rumgeschlagen, und selbst was dazu geschrieben, aber man kann es ja trotzdem so nutzen. Was mir noch zum optimieren einfällt, wäre, dass man die Datei vorher lädt, und dann das Handle übergibt. Man kann ja mit Seekfile die Position an den Anfang schieben. Aber das ist ja an sich eine Arbeit von wenigen Minuten. Aber, wie gesagt, an sich eine nette Sache, wenn man keine Lust hat, sich das selbst zu coden.

EDIT: Tut es (leider) nicht, das hatte Ich beim überfliegen nicht bemerkt, die Funktion "TrimLeft" ist nicht dabei, und der Type "zeile" auch nicht.
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group