December 03, 2020, 07:30:54 PM

Author Topic: [bmx] Best INI file reader/writer by JoshK [ 1+ years ago ]  (Read 594 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Best INI file reader/writer
Author : JoshK
Posted : 1+ years ago

Description : Fast access to INI properties

Code :
Code: BlitzMax
  1. SuperStrict
  2.  
  3. Import brl.map
  4. Import brl.stream
  5. Import brl.retro
  6.  
  7. Type TIni
  8.        
  9.         Field map:TMap=New TMap
  10.        
  11.         Method SetKey(key:String,value:String,section:String="General")
  12.                 Local submap:TMap
  13.                
  14.                 submap:TMap=TMap(map.valueforkey(section))
  15.                 If Not submap
  16.                         submap=New TMap
  17.                         map.insert section,submap
  18.                 EndIf
  19.                
  20.                 submap.insert key,value
  21.         EndMethod
  22.        
  23.         Method GetKey:String(key:String,defaultvalue:String="",section:String="General")
  24.                 Local submap:TMap
  25.                
  26.                 submap:TMap=TMap(map.valueforkey(section))
  27.                 If Not submap Return defaultvalue
  28.                 If Not submap.contains(key) Return defaultvalue
  29.                 Return String(submap.valueforkey(key))
  30.         EndMethod
  31.  
  32.         Method ContainsKey:Int(key:String,section:String="General")
  33.                 Local submap:TMap
  34.                
  35.                 submap:TMap=TMap(map.valueforkey(section))
  36.                 If Not submap Return False
  37.                 If Not submap.contains(key) Return False
  38.                 Return True
  39.         EndMethod
  40.        
  41.         Method Save:Int(url:Object)
  42.                 Local stream:TStream
  43.                 Local section:String
  44.                 Local submap:TMap
  45.                 Local key:String
  46.                 Local started:Int=False
  47.                
  48.                 stream=WriteStream(url)
  49.                 If Not stream Return False
  50.                 For section=EachIn map.keys()
  51.                         submap=TMap(map.valueforkey(section))
  52.                         If Not submap.isempty()
  53.                                 If started stream.WriteLine("")
  54.                                 stream.WriteLine("["+section+"]")
  55.                                 For key=EachIn submap.keys()
  56.                                         stream.WriteLine key+"=~q"+String(submap.valueforkey(key))+"~q"
  57.                                 Next
  58.                                 started=True
  59.                         EndIf
  60.                 Next
  61.                 stream.close()
  62.                 Return True
  63.         EndMethod
  64.        
  65.         Function Create:TIni()
  66.                 Local ini:TIni=New TIni
  67.                 Return ini
  68.         EndFunction
  69.        
  70.         Function Load:TIni(url:Object)
  71.                 Local ini:TIni
  72.                 Local stream:TStream
  73.                 Local s:String
  74.                 Local section:String
  75.                 Local sarr:String[]
  76.                 Local key:String
  77.                 Local value:String
  78.                
  79.                 stream=ReadStream(url)
  80.                 If Not stream Return Null
  81.                 ini=New TIni
  82.                
  83.                 While Not stream.Eof()
  84.                         s=stream.ReadLine().Trim()
  85.                         If s
  86.                                 If s[0]=Asc(";") Continue
  87.                                 If s[0]=Asc("[") And s[s.length-1]=Asc("]")
  88.                                         section=Mid(s,2,s.length-2)
  89.                                 Else
  90.                                         sarr=s.split("=")
  91.                                         If sarr.length=2
  92.                                                 key=sarr[0].Trim()
  93.                                                 value=sarr[1].Trim()
  94.                                                 If value<>"" And key<>""
  95.                                                         If value[0]=34 And value[value.length-1]=34
  96.                                                                 value=Mid(value,2,value.length-2)
  97.                                                         EndIf
  98.                                                         ini.setkey(key,value,section)
  99.                                                 EndIf
  100.                                         EndIf
  101.                                 EndIf
  102.                         EndIf
  103.                 Wend
  104.                 stream.close()
  105.                
  106.                 Return ini
  107.         EndFunction
  108.        
  109. EndType


Comments :


Shagwana(Posted 11 months ago)

 This method can be used to get and set at the same time, useful when no ini file exists to start with.
Code: [Select]
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


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal