ArrayToINIsection

A User Function for use with Oblivion Script Extender

Syntax:

ArrayToINIsection SerialArray:array, Filename:string, SectionName:string

Writes an array to a Pluggy INI file

The arguments are:

  • SerialArray - the array to write - must be one dimensional - see ArraySerialize
  • Filename - a string with the name of the file
  • SectionName - a string with the name of the INI section


NotesEdit

  • The input array must be a StringMap type, serialized array. Second level arrays, if present, will be ignored.

UsageEdit

Call ArrayToINIsection MySerialArray "MyFilename.ini" "Section51"

If MySerialArray looks like this:

['EntryA_Attr1'] = 'A' 
['EntryA_Attr1_0_Value1'] = 11
['EntryA_Attr1_0_Value2'] = 22
['EntryA_Attr1_1_Value1'] = 1111
['EntryA_Attr1_1_Value2'] = 2222
['EntryB_Attr1'] = 'B' 
. . . etc

The INI section will be this:

[Section51]
EntryA_Attr1='A' 
EntryA_Attr1_0_Value1=11
EntryA_Attr1_0_Value2=22
EntryA_Attr1_1_Value1=1111
EntryA_Attr1_1_Value2=2222
EntryB_Attr1='B' 
. . . etc


CodeEdit

scn zzzArrayToINIsection
;---------------------------------------
;    Writes an INI section with data received in the input array
;---------------------------------------
array_var asEntry
array_var asSerial
float v
ref reff
short i
string_var sFilename
string_var sKey
string_var sSection
string_var sText 
 
long psFile             ;===Pluggy===
long psSection          ;===Pluggy===
long psKey             ;===Pluggy===
long psValue         ;===Pluggy===

begin Function {asSerial sFilename sSection }

   ;=== Initialize ===
   let psFile := createstring -1 0 1 1
   let psSection  := createstring -1 0 1 1
   let psKey := createstring -1 0 1 1
   let psValue := createstring -1 0 1 1

   setstring psSection $sSection  
   setstring psFile $sFilename 

   ;=== DELETE existing section ===
   IniDelKey psFile psSection 

   foreach asEntry <- asSerial 
       ;=== Set the key ===
       let sKey := asEntry[key]
 
       setString psKey $sKey
     
       ;=== Set the value ===
       if eval (typeof asEntry[value]) == "String"
           let sText := "'" + asEntry[value] + "'"
           setString psValue $sText 
           IniWriteString psFile psSection psKey psValue
 
       elseif eval (typeof asEntry[value]) ==  "Number"
           let v := asEntry[value]
           let sText := $v
           setString psValue $sText 
           IniWriteString psFile psSection psKey psValue
 
       elseif eval (typeof asEntry[value]) ==  "Form"
           let reff := asEntry[value]
           let sText := "0x" + GetFormIDString reff
           setString psValue $sText 
           IniWriteString psFile psSection psKey psValue
       endif
   loop
 
   DestroyString psFile
   DestroyString psSection
   DestroyString psKey 
   DestroyString psValue 
   sv_destruct sKey sText 
end


See AlsoEdit