Ooops
March 05, 2021, 07:07:34 AM

Author Topic: [bb] Simple ini functions by skn3 [ 1+ years ago ]  (Read 539 times)

Offline BlitzBot

[bb] Simple ini functions by skn3 [ 1+ years ago ]
« on: June 29, 2017, 12:28:40 AM »
Title : Simple ini functions
Author : skn3
Posted : 1+ years ago

Description : Simple to use ini access.

SetIniItem(ini$,group$,item$,value$)
GetIniItem(ini$,group$,name$)

plus

CountIniGroups(ini$)
CountIniGroupItems(ini$,group$)


Code :
Code: BlitzBasic
  1. ; ============================================================================================================
  2. ; example
  3. SetIniItem("settings.ini","group1","x",50)
  4. SetIniItem("settings.ini","group1","y",120)
  5. SetIniItem("settings.ini","group2","open",False)
  6. SetIniItem("settings.ini","group2","show",True)
  7. RuntimeError GetIniItem("datasettings.ini","group1","y")
  8. ; ============================================================================================================
  9.  
  10.  
  11. ; ============================================================================================================
  12. ; functions
  13. Function SetIniItem(ini$,groupname$,itemname$,itemvalue$)
  14.         Local group.INI_groups,item.INI_items
  15.  
  16.         ;load ini
  17.         INI_LoadIni(ini$)
  18.         ;create group & item where needed
  19.         group = INI_FindGroup(groupname$)
  20.         If group = Null group = INI_CreateGroup(groupname$)
  21.         item  = INI_FindItem(group,itemname$)
  22.         If item = Null
  23.                 item = INI_CreateItem(itemname$,itemvalue$,group)
  24.         Else
  25.                 itemvalue$ = itemvalue$
  26.         End If
  27.         ;save ini
  28.         INI_SaveIni(ini$)
  29.         Return True
  30. End Function
  31. Function GetIniItem$(ini$,groupname$,itemname$)
  32.         Local group.INI_groups,item.INI_items
  33.        
  34.         ;load ini
  35.         INI_LoadIni(ini$)
  36.         ;check group & item exist
  37.         group = INI_FindGroup(groupname$)
  38.         If group = Null Return ""
  39.         item  = INI_FindItem(group,itemname$)
  40.         If item = Null Return ""
  41.         ;return item value
  42.         Return itemvalue$
  43. End Function
  44. Function CountIniGroups(ini$)
  45.         Local group.INI_groups,count
  46.        
  47.         If INI_LoadIni(ini$) = False
  48.                 Return 0
  49.         Else
  50.                 count = 0
  51.                 For group = Each INI_groups
  52.                         count = count + 1
  53.                 Next
  54.                 Return count
  55.         End If
  56. End Function
  57. Function CountIniGroupItems(ini$,name$)
  58.         Local group.INI_groups,item.INI_items,count
  59.        
  60.         If INI_LoadIni(ini$) = False
  61.                 Return 0
  62.         Else
  63.                 group = INI_FindGroup(name$)
  64.                 If group = Null
  65.                         Return 0
  66.                 Else
  67.                         If groups = Null
  68.                                 Return 0
  69.                         Else
  70.                                 item  = groups
  71.                                 count = 0
  72.                                 Repeat
  73.                                         count = count + 1
  74.                                         If item = groupe Return count
  75.                                         item = After item
  76.                                 Forever
  77.                         End If
  78.                 End If
  79.         End If
  80. End Function
  81. ; ============================================================================================================
  82.  
  83.  
  84. ; ============================================================================================================
  85. ; this stuff doesn't need to be touched at all
  86. Type INI_groups
  87.         Field inactive
  88.         Field name$
  89.         Field s.INI_items
  90.         Field e.INI_items
  91. End Type
  92. Type INI_items
  93.         Field inactive
  94.         Field name$
  95.         Field value$
  96. End Type
  97. Function INI_FindGroup.INI_groups(name$)
  98.         Local group.INI_groups
  99.        
  100.         name$ = Lower$(name$)
  101.        
  102.         For group = Each INI_groups
  103.                 If group
  104. ame$ = name$ Return group
  105.         Next
  106.         Return Null
  107. End Function
  108. Function INI_FindItem.INI_items(group.INI_groups,name$)
  109.         Local item.INI_items
  110.        
  111.         name$ = Lower$(name$)
  112.        
  113.         If groups <> Null
  114.                 item = groups
  115.                 Repeat
  116.                         If item
  117. ame$ = name$ Return item
  118.                         If item = groupe Return Null
  119.                         item = After item
  120.                 Forever
  121.         End If
  122.         Return Null
  123. End Function
  124. Function INI_CreateGroup.INI_groups(name$)
  125.         Local found,group.INI_groups
  126.        
  127.         name$ = Lower$(name$)
  128.        
  129.         ;make sure existing group is not using same name
  130.         For group = Each INI_groups
  131.                 If group
  132. ame$ = name$ Return Null
  133.         Next
  134.         found = False
  135.         ;look for inactive group to reuse
  136.         For group = Each INI_groups
  137.                 If groupinactive
  138.                         found = True
  139.                         Exit
  140.                 End If
  141.         Next
  142.         If found = False group = New INI_groups
  143.         groupinactive = False
  144.         group
  145. ame$    = name$
  146.        
  147.         Return group
  148. End Function
  149. Function INI_CreateItem.INI_items(name$,value$,group.INI_groups)
  150.         Local found,item.INI_items
  151.        
  152.         name$ = Lower$(name$)
  153.        
  154.         ;make sure existing variable is not using same name
  155.         If groups <> Null
  156.                 item = groups
  157.                 Repeat
  158.                         If item
  159. ame$ = name$
  160.                                 Return Null
  161.                         End If
  162.                         If item = groupe Exit
  163.                         item = After item
  164.                 Forever
  165.         End If
  166.         ;look for inactive item to reuse
  167.         found = False
  168.         For item = Each INI_items
  169.                 If iteminactive
  170.                         Insert item After Last INI_items
  171.                         found = True
  172.                         Exit
  173.                 End If
  174.         Next
  175.         If found = False item = New INI_items
  176.         iteminactive = False
  177.         item
  178. ame$    = name$
  179.         itemvalue$   = value$
  180.         ;update group this item belongs too
  181.         If groups = Null
  182.                 groups = item
  183.         Else
  184.                 Insert item After groupe
  185.         End If
  186.         groupe       = item
  187.        
  188.         Return item
  189. End Function
  190. Function INI_LoadIni(path$)
  191.         Local group.INI_groups,item.INI_items,file,getline$,found
  192.        
  193.         ;check for error in path
  194.         If FileType(path$) <> 1 Return False
  195.         file = ReadFile(path$)
  196.         If file = False Return False
  197.        
  198.         ;clear old groups
  199.         For group = Each INI_groups
  200.                 groupinactive = True
  201.                 group
  202. ame$    = ""
  203.                 groups        = Null
  204.                 groupe        = Null
  205.                 ;clear old items for group
  206.                 If groups <> Null
  207.                         item = groups
  208.                         Repeat
  209.                                 iteminactive = True
  210.                                 item
  211. ame$    = ""
  212.                                 itemvalue$   = ""
  213.                                 If item = groupe Exit
  214.                                 item = After item
  215.                         Forever
  216.                 End If
  217.         Next
  218.                
  219.         ;load ini file
  220.         group = Null
  221.         item  = Null
  222.         While Eof(file) = False
  223.                 getline$ = Trim$(ReadLine$(file))
  224.                 Select Left$(getline$,1)
  225.                         Case "["     ; ini group
  226.                                 ;create new group
  227.                                 group = INI_CreateGroup(Mid$(getline$,2,Len(getline$)-2))
  228.                         Case ";","#","" ; ini comment, do nothing
  229.                         Default      ; ini item
  230.                                 ;create new item
  231.                                 item = INI_CreateItem(Trim$(Left$(getline$,Instr(getline$,"=")-1)),Right$(getline$,Len(getline$)-Instr(getline$,"=")),group)           
  232.                 End Select
  233.         Wend
  234.         CloseFile(file)
  235.         Return True
  236. End Function
  237. Function INI_SaveIni(path$)
  238.         Local file,group.INI_groups,item.INI_items,firstgroup
  239.        
  240.         file       = WriteFile(path$)
  241.         firstgroup = True
  242.         For group = Each INI_groups
  243.                 If firstgroup = False
  244.                         WriteLine(file,"")
  245.                 Else
  246.                         firstgroup = False
  247.                 End If
  248.                 WriteLine(file,"["+group
  249. ame$+"]")
  250.                 If groups <> Null
  251.                         item = groups
  252.                         Repeat
  253.                                 WriteLine(file,item
  254. ame$+"="+itemvalue$)
  255.                                 If item = groupe Exit
  256.                                 item = After item
  257.                         Forever
  258.                 End If
  259.         Next
  260.         CloseFile(file)
  261. End Function
  262. ; ============================================================================================================


Comments :


Koriolis(Posted 1+ years ago)

 Nice litle functions. Some problems though:- you do CloseFile(path$), that's closefile(file)- replacing     Case ";","#"   by     Case ";","#", ""  would allow to have blank lines.Apart that, works well (just to be pit nicky, could be more efficient if you wasn't loading/saving the file at any item access...OK, who cares).Thanks to share :)


skn3(Posted 1+ years ago)

 Thanks for the bug fixes.I decided to make the functions encapsulated, because there are already solutions for the method you describe.


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal