Seite 1 von 1

PreferenceComment Position in PB4

Verfasst: 14.04.2006 13:09
von uweb
Durch den folgenden Code wird eine vollwertige Preference-Datei (server.ini) incl. PreferenceComment
erzeugt wenn sie nicht schon existiert.
Wenn sie schon existiert aber Einträge fehlen werden die incl. PreferenceComment eingetragen.

Das kann man leicht testen wenn man aus der server.ini Einträge entfernt und den Code neu laufen lässt.

Dabei wird dann mein Problem sichtbar :
Der erste PreferenceComment steht nicht vor dem dazugehörigen Eintrag.

Hat jemand eine Idee wie ich das besser lösen kann ?

Code: Alles auswählen

Global ServerFolder.s=Space(255)
GetCurrentDirectory_(255,@ServerFolder)
If Right(ServerFolder,1)<>"\"
  ServerFolder+"\"
EndIf


;server.ini
Global ServerName.s = "WF-Server"
Global Port         = 80
Global BufferSize   = 16777216
Global WebFolder.s  = "www"

Procedure.s ReadPreferenceStringKey(Keyword.s,Value.s)
  Value="*"+Value
  Value=ReadPreferenceString(Keyword,Value)
  If Left(Value, 1) = "*"
    Value=Right(Value, Len(Value)-1)
    Now.s = FormatDate("J%yyyy M%mm D%dd T%hh:%ii:%ss : ", Date())
    PreferenceComment(Now+"The following entry was missed and therefore insert by server.")
    WritePreferenceString(Keyword, Value)
  EndIf
  ProcedureReturn Value
EndProcedure

Procedure.l ReadPreferenceLongKey(Keyword.s,LongValue.l)
  Value.s="*"+Str(LongValue)
  Value=ReadPreferenceString(Keyword,Value)
  If Left(Value, 1) = "*"
    Value=Right(Value, Len(Value)-1)
    Now.s = FormatDate("J%yyyy M%mm D%dd T%hh:%ii:%ss : ", Date())
    PreferenceComment(Now+"The following entry was missed and therefore insert by server.")
    WritePreferenceString(Keyword, Value)
  EndIf
  ProcedureReturn Val(Value)
EndProcedure

Procedure.l ReadINI()
  Select FileSize("server.ini") 
    Case -1
      CreatePreferences("server.ini")
      Now.s = FormatDate("J%yyyy M%mm D%dd T%hh:%ii:%ss : ", Date())
      PreferenceComment(Now+"This file was missed and therefore written by server.")
      WritePreferenceString("ServerName",ServerName)
      WritePreferenceLong("Port",Port)
      WritePreferenceLong("BufferSize",BufferSize)
      WritePreferenceString("WebFolder",WebFolder)
      ClosePreferences()
      ReturnValue = 1
    Case -2
      MessageRequester("Error","Couldn't create server.ini in Folder "+ServerFolder+" .")
      ReturnValue = 2
    Default
      OpenPreferences("server.ini")
      Now.s = FormatDate("J%yyyy M%mm D%dd T%hh:%ii:%ss : ", Date())
      PreferenceComment(Now+"Last server access.")
      ServerName=ReadPreferenceStringKey("ServerName",ServerName)
      Port=ReadPreferenceLongKey("Port",Port)
      BufferSize=ReadPreferenceLongKey("BufferSize",BufferSize)
      WebFolder=ReadPreferenceStringKey("WebFolder",WebFolder)
      ClosePreferences()
      ReturnValue = 0
  EndSelect
  ProcedureReturn ReturnValue
EndProcedure

ReadINI()


Verfasst: 15.04.2006 02:01
von Konne
Mit ReadFile() vielleicht?

Verfasst: 15.04.2006 07:24
von uweb
Danke für die Antwort. Ich dachte schon ich habe Mundgeruch.

Letzte Nacht habe ich die Lösung gefunden. Da ich aber ziemlich müde war und nicht damit gerechnet habe, daß sich noch jemand dafür interessiert habe ich es noch nicht geschrieben.

Code: Alles auswählen

ExaminePreferenceKeys():While NextPreferenceKey():Wend

Verfasst: 15.04.2006 07:37
von Konne
Nunja ich hab den Link 'unbenatwortete beitraege' gefunden. Readfile macht aber irgendwie keinen Sinn wennschon Openfile. Damit meine ich die ini selber zu bearbeiten. Deine Loesung ist aber sicher uewbersichtlicher.

Verfasst: 15.04.2006 10:28
von uweb
Nunja ich hab den Link 'unbenatwortete beitraege' gefunden.
Interessant ! Vielleicht hätte ich gestern meine Frage

http://www.purebasic.fr/german/viewtopic.php?t=7869

in einen eigenen Thread stellen sollen statt mich an einen anderen anzuhängen.

Bis jetzt habe ich dort noch keine Antwort bekommen.