.INI read/write routines

By | 2002-06-01

.INI read/write routines
mfncGetFromIni– Reads from an *.INI file strFileName (full path & file name)
mfncWriteIni–Writes to an *.INI file called strFileName (full path & file name)
sitush@aol.com

Original Author: Newsgroup Posting

Returns

mfncGetFromIni–The string stored in [strSectionHeader], line beginning strVariableName
mfncWriteIni–Integer indicating failure (0) or success (other) to write

API Declarations

Declare Function GetPrivateProfileString Lib “Kernel” (ByVal
lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String,
ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName
As String) As Integer
Declare Function WritePrivateProfileString% Lib “Kernel” (ByVal
lpApplicationName$, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal
lpFileName$)

Code


Function mfncGetFromIni (strSectionHeader As String, strVariableName As
String, strFileName As String) As String
  
  '*** DESCRIPTION:  Reads from an *.INI file strFileName (full path &
file name)
  '*** RETURNS:    The string stored in [strSectionHeader], line
beginning strVariableName=
  '*** NOTE:     Requires declaration of API call
GetPrivateProfileString
  'Initialise variable
  Dim strReturn As String
  
  'Blank the return string
  strReturn = String(255, Chr(0))
  'Get requested information, trimming the returned string
  mfncGetFromIni = Left$(strReturn,
GetPrivateProfileString(strSectionHeader, ByVal strVariableName, "",
strReturn, Len(strReturn), strFileName))
End Function
Function mfncParseString (strIn As String, intOffset As Integer,
strDelimiter As String) As String
  '*** DESCRIPTION:  Parses the passed string, returning the value
indicated
  '***        by the offset specified, eg: the string "Hello,
World",
  '***        offset 2 = "World".
  '*** RETURNS:    See description.
  '*** NOTE:     The offset starts at 1 and the delimiter is the
character
  '***        which separates the elements of the string.
  'Trap any bad calls
  If Len(strIn) = 0 Or intOffset = 0 Then
    mfncParseString = ""
    Exit Function
  End If
  'Declare local variables
  Dim intStartPos As Integer
  ReDim intDelimPos(10) As Integer
  Dim intStrLen As Integer
  Dim intNoOfDelims As Integer
  Dim intCount As Integer
  Dim strQuotationMarks As String
  Dim intInsideQuotationMarks As Integer
  strQuotationMarks = Chr(34) & Chr(147) & Chr(148)
  intInsideQuotationMarks = False
  For intCount = 1 To Len(strIn)
    'If character is a double-quote then toggle the In Quotation flag
    If InStr(strQuotationMarks, Mid$(strIn, intCount, 1)) <> 0 Then
      intInsideQuotationMarks = (Not intInsideQuotationMarks)
    End If
    If (Not intInsideQuotationMarks) And (Mid$(strIn, intCount, 1) =
strDelimiter) Then
      intNoOfDelims = intNoOfDelims + 1
      'If array filled then enlarge it, keeping existing contents
      If (intNoOfDelims Mod 10) = 0 Then
        ReDim Preserve intDelimPos(intNoOfDelims + 10)
      End If
      intDelimPos(intNoOfDelims) = intCount
    End If
  Next intCount
  'Handle request for value not present (over-run)
  If intOffset > (intNoOfDelims + 1) Then
    mfncParseString = ""
    Exit Function
  End If
  'Handle boundaries of string
  If intOffset = 1 Then
    intStartPos = 1
  End If
  'Requesting last value - handle null
  If intOffset = (intNoOfDelims + 1) Then
    If Right$(strIn, 1) = strDelimiter Then
      intStartPos = -1
      intStrLen = -1
      mfncParseString = ""
      Exit Function
    Else
      intStrLen = Len(strIn) - intDelimPos(intOffset - 1)
    End If
  End If
  'Set start and length variables if not handled by boundary check above
  If intStartPos = 0 Then
    intStartPos = intDelimPos(intOffset - 1) + 1
  End If
  If intStrLen = 0 Then
    intStrLen = intDelimPos(intOffset) - intStartPos
  End If
  'Set the return string
  mfncParseString = Mid$(strIn, intStartPos, intStrLen)
  
End Function
Function mfncWriteIni (strSectionHeader As String, strVariableName As
String, strValue As String, strFileName As String) As Integer
  '*** DESCRIPTION:  Writes to an *.INI file called strFileName (full
path & file name)
  '*** RETURNS:    Integer indicating failure (0) or success (other)
to write
  '*** NOTE:     Requires declaration of API call
WritePrivateProfileString
  'Call the API
  mfncWriteIni = WritePrivateProfileString(strSectionHeader,
strVariableName, strValue, strFileName)
End Function

Author: dwirch

Derek Wirch is a seasoned IT professional with an impressive career dating back to 1986. He brings a wealth of knowledge and hands-on experience that is invaluable to those embarking on their journey in the tech industry.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.