Code archives/File Utilities/Best INI file reader/writer
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Fast access to INI properties | |||||
SuperStrict Import brl.map Import brl.stream Import brl.retro Type TIni Field map:TMap=New TMap Method SetKey(key:String,value:String,section:String="General") Local submap:TMap submap:TMap=TMap(map.valueforkey(section)) If Not submap submap=New TMap map.insert section,submap EndIf submap.insert key,value EndMethod Method GetKey:String(key:String,defaultvalue:String="",section:String="General") Local submap:TMap submap:TMap=TMap(map.valueforkey(section)) If Not submap Return defaultvalue If Not submap.contains(key) Return defaultvalue Return String(submap.valueforkey(key)) EndMethod Method ContainsKey:Int(key:String,section:String="General") Local submap:TMap submap:TMap=TMap(map.valueforkey(section)) If Not submap Return False If Not submap.contains(key) Return False Return True EndMethod Method Save:Int(url:Object) Local stream:TStream Local section:String Local submap:TMap Local key:String Local started:Int=False stream=WriteStream(url) If Not stream Return False For section=EachIn map.keys() submap=TMap(map.valueforkey(section)) If Not submap.isempty() If started stream.WriteLine("") stream.WriteLine("["+section+"]") For key=EachIn submap.keys() stream.WriteLine key+"=~q"+String(submap.valueforkey(key))+"~q" Next started=True EndIf Next stream.close() Return True EndMethod Function Create:TIni() Local ini:TIni=New TIni Return ini EndFunction Function Load:TIni(url:Object) Local ini:TIni Local stream:TStream Local s:String Local section:String Local sarr:String[] Local key:String Local value:String stream=ReadStream(url) If Not stream Return Null ini=New TIni While Not stream.Eof() s=stream.ReadLine().Trim() If s If s[0]=Asc(";") Continue If s[0]=Asc("[") And s[s.length-1]=Asc("]") section=Mid(s,2,s.length-2) Else sarr=s.split("=") If sarr.length=2 key=sarr[0].Trim() value=sarr[1].Trim() If value<>"" And key<>"" If value[0]=34 And value[value.length-1]=34 value=Mid(value,2,value.length-2) EndIf ini.setkey(key,value,section) EndIf EndIf EndIf EndIf Wend stream.close() Return ini EndFunction EndType |
Comments
| ||
This method can be used to get and set at the same time, useful when no ini file exists to start with.Method GetAndSet:string(key:String,defaultvalue:String="",section:String="General") Local value:string = self.GetKey(key,defaultvalue,section) self.SetKey(key,value,section) Return value EndMethod |
Code Archives Forum