Read and Write easy your INI files with Blitz3D
Blitz3D Forums/Blitz3D Tutorials/Read and Write easy your INI files with Blitz3D| 
 | ||
| With external DLL calls capability, Blitz can achieve an high grade of programmability. In this tutorial i try to explain how to manage easily you ini files. First you need to create in blitz 'userlibs' directory a decls file to import API routines. Save it as kernel32.decls ; Userlibs kernel32.decls .lib "kernel32.dll" GetPrivateProfileString%(lpApplicationName$,lpKeyName$,lpDefault$,lpReturnedString*,nSize%,lpFileName$):"GetPrivateProfileStringA" WritePrivateProfileString%(lpApplicationName$,lpKeyName$,lpString$,lpFileName$):"WritePrivateProfileStringA" Done? Well. Now you must include in your source code two functions to write and retrieve values in ini file: 
Function SetIniString%(FileINI$, Section$, Key$, Value$)
  ; FileINI = file (must include path, for current dir use .\) to write into (eg: ".\myinifile.ini")
  ; Section$ = section that will include your key and value (eg: "GeneralSetup")
  ; Key$ = Key's name for the value (eg: "BackColor")
  ; Value$ = Value to write in Key (eg: "ff00ff")
  ; If the function succedeed it return True otherwhise False
  ; result in myinifile.ini:
  ; [GeneralSetup]
  ; BackColor=ff00ff
  Ret%=WritePrivateProfileString(Section$, Key$, Value$, FileINI$)
  If Ret% <> 1 Then
    Return False
  Else
    Return True
  End If
  
End Function
Function GetIniString$(FileINI$,Section$,Key$,DefaultValue$)
  ; FileINI = file (must include path, for current dir use .\) to read (eg: "c:\windows\myinifile.ini")
  ; Section$ = section where search your key (eg: "GeneralSetup")
  ; Key$ = Key's name to search (eg: "BackColor")
  ; DefaultValue$ = Value to return if key or file or section is not found (eg: "ff00ff")
  ; Function return value retrieved from searched Key or the user's default value
  myString$=""
  myBank=CreateBank(255)
  LenString%=GetPrivateProfileString(Section$, Key$, DefaultValue$, myBank, 255, FileINI$)
  For x=1 To LenString%
    myString$=myString$+Chr(PeekByte(myBank,x-1))
  Next
  FreeBank myBank
  Return myString$
	
End Function
You can manage also integer or floating number, you dont need to convert it to string before writing or after read. That's all! | 
| 
 | ||
| Use of these functions. Imagine to load at start you preferred program variables, previuosly saved in you ini file. Code may be: const INIFILE$=".\myini.ini" WindowsSize$=GetIniString(INIFILE,"Window","Size","Maximized") WindowsCoords$=GetIniString(INIFILE,"Window","Coords","0,0,640,480") MaxScore%=GetIniString(INIFILE,"Players","MaxScore","9999") MaxScorePlayerName$=GetIniString(INIFILE,"Players","MaxScoreName","????") ... and so on To write: SetIniString(INIFILE,"Window","Size",WindowsSize$) SetIniString(INIFILE,"Window","Coords",WindowsCoords$) SetIniString(INIFILE,"Players","MaxScore",MaxScore%) SetIniString(INIFILE,"Players","MaxScoreName",MaxScorePlayerName$) Note that you can control if the write operation was successeful with: if not SetIniString(INIFILE,"Window","Size",WindowsSize$) then ... (manage here your error) |