Search the Community
Showing results for tags 'inireadsection'.
-
Hello, all.. My AutoIT is pretty terrible - but I get by with trawling here I came across an issue where i had to parse a large key in a large ini file, and found that I was victim of inireadsection's limit of "Only the first 32767 chars are read for legacy reasons." I've attempted to put together some terrible code that parses an ini section. It's absolutely nowhere near good, but I figured I'd put it here so that folk who know what they're doing can laugh at improve it. $Ini = @ScriptDir & "\bigini.ini" Dim $IniArray[0][2] $KeyName = "Person" $R = FileOpen($Ini, 0) $IniStr = FileRead($R) FileClose($R) $Start = StringInStr($iniStr, "[" & $KeyName & "]") If $Start = 0 then Msgbox(16, "Error", "String not found") Exit EndIf $Stop = StringInStr($IniStr, @CRLF & "[", 0, 1, ($Start + 1)) If $Stop = 0 then $Stop = StringLen($IniStr) EndIf $String = StringMid($IniStr, $Start, ($Stop - $Start)) $Split = StringSplit($String, @CRLF, 1) $KeyCount = 0 Dim $IniArray[65535][2] For $Loop = 1 to $Split[0] $Add = "Y" $Str = $Split[$Loop] $EQBreak = StringInStr($Str, "=") Select Case StringMid($Str, 1, 1) = ";" $Add = "N" Case $EQBreak = 0 $Add = "N" Case Else $Add = "Y" EndSelect If $Add = "Y" then $KeyCount = $KeyCount + 1 $Key = StringMid($Str, 1, ($EQBreak - 1)) $Val = StringMid($Str, ($EQBreak + 1)) $IniArray[$KeyCount][0] = $Key $IniArray[$KeyCount][1] = $Val EndIf Next Redim $IniArray[$KeyCount +1][2] ; Add the number of hits to 00 to match inireadsection $IniArray[0][0] = $KeyCount _ArrayDisplay($IniArray) ; Do stuff with the Array like you would inireadsection
-
Read and combine multiple sections inifile
Wingens posted a topic in AutoIt General Help and Support
Hi I am trying to read multiple sections from an ini file into an array and use the result to calculate how many records there are from the suppliers and this devided into the status records that belong to it. The problem I am having; I am able to use Ubound to calculate how many record there are in total to the option chosen from the combo box, but where I am getting stuck is the part to link the status and leverancier to each other and count them. Hope some one can help me. My code right now: #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <file.au3> #include <array.au3> $Form1 = GUICreate("Form1", 615, 437, 569, 253) $LEVCOMBO = GUICtrlCreateCombo("", 184, 112, 145, 25, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL)) Global $aSections = IniReadSectionNames(@ScriptDir & "\leveranciers.ini") If (Not @Error) Then GUICtrlSetData($LEVCOMBO, _ArraytoString($aSections, "|", 1), $aSections[1]) $LABEL = GUICtrlCreateLabel("Totaal aantal RMA aanvragen: ", 48, 200, 250, 21) $TOTALCOUNT = GUICtrlCreateLabel("", 200, 200, 100, 21) $LABEL2 = GUICtrlCreateLabel("Aantal aangevraagd: ", 48, 225, 250, 21) $TOTALAANGEVRAAGD = GUICtrlCreateLabel("", 200, 225, 100, 21) $LABEL3 = GUICtrlCreateLabel("Aantal verzonden: ", 48, 250, 250, 21) $TOTALVERZONDEN = GUICtrlCreateLabel("", 200, 250, 100, 21) $LABEL4 = GUICtrlCreateLabel("Aantal afgehandeld: ", 48, 275, 250, 21) $TOTALAFGEHANDELD = GUICtrlCreateLabel("", 200, 275, 100, 21) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $LEVCOMBO COMBO() EndSwitch WEnd Func COMBO() Local $hINI_FILENAME = @ScriptDir & "\ini.ini" $READAANGEVRAAGDRMA = IniReadSection($hINI_FILENAME, 'LEVERANCIER') $READSTATUS = IniReadSection($hINI_FILENAME, 'STATUS') $VAR = GUICtrlRead($LEVCOMBO) $READAANGEVRAAGDRMACOUNT = _ArrayFindAll($READAANGEVRAAGDRMA, $VAR, Default, Default, Default, Default, 1) GUICtrlSetData($TOTALCOUNT,UBound($READAANGEVRAAGDRMACOUNT)) $nb = $READAANGEVRAAGDRMA[0][0] Local $res[$nb+1][3] $res[0][0] = $nb For $i = 1 to $nb $res[$i][0] = $READAANGEVRAAGDRMA[$i][1] $res[$i][1] = $READSTATUS[$i][1] Next _ArrayDisplay($res) EndFunc And the ini files that goes with it: ini.ini: [STATUS] 1=Afgehandeld 3=Verzonden 4=Aangevraagd 5=Aangevraagd 6=Aangevraagd 7=Aangevraagd 8=Verzonden 9=Aangevraagd 10=Aangevraagd 11=Aangevraagd 12=Aangevraagd 13=Aangevraagd 14=Aangevraagd 15=Aangevraagd 16=Aangevraagd 17=Aangevraagd 18=Aangevraagd 19=Aangevraagd 20=Aangevraagd 21=Aangevraagd 22=Aangevraagd [LEVERANCIER] 9=Dobit B.V. 1=Dobit B.V. 10=Dobit B.V. 11=Dobit B.V. 12=Dobit B.V. 13=Dobit B.V. 14=Asus 15=Asus 16=Brother 17=Dobit B.V. 18=Dobit B.V. 19=Dobit B.V. 20=Dobit B.V. 21=Dobit B.V. 22=Asus leveranciers.ini: [Kies een leverancier...] [Dobit B.V.] URL =http://eline.dobit.be/eline/master.php [TechData B.V.] URL = [MaxICT B.V.] URL = [Brother] URL= [Asus] URL=https://eu-rma.asus.com/pickup_europe/pickup.aspx?country=nl [HP] URL= [Lenovo] URL= [CCV] URL= test.au3 ini.ini leveranciers.ini -
My goal is to read the ini file in so if the computer / server name is in the list then it will simply pop it up in the msg box - problem is it's not working - I've obviously done something wrong here !! The .ini file looks like this. [servers] server1=aaa-srv1 server2=bbb-srv1 server3=ccc-srv5 server4=ddd-srv2 server5=eee-srv1 server6=ggg-srv5 server7=kkk-srv1 server8=ppp-srv2 server9=zzz-srv3 server10=xxx-srv1 server11=mmm-srv1 The code: $cname = @ComputerName $ip = @IPAddress1 $user = @UserName $name = IniReadSection(@ScriptDir & "\server_list.ini", "servers") If @error Then MsgBox(4096, "", "Error occurred, probably no INI file.") Else For $i = 1 To $name[0][0] ;MsgBox(4096, "", $name[$i]) Next EndIf If $cname = $name Then MsgBox(4096, "", $name[$i]) EndIf Would appreciated a pointer where I've gone wrong.
-
Hello, I am writing a program that can scan an ini file for a list of software. If I have the script look at a populated ini file, it runs fine. When the ini file has no keys or values, I get a subscript error. Can someone look at my code to what I am doing wrong please? ;Check Software.ini file to populate list $iCount = IniReadSection("C:\Program Files\App\Software.ini", "ApplicationName") If @error Then IniWriteSection("C:\Program Files\App\Software.ini", "ApplicationName", "", "") IniWriteSection("C:\Program Files\App\Software.ini", "Install", "", "") Sleep(4000) EndIf _ArrayDisplay($iCount) For $i = 1 To $iCount[0][0] _GUICtrlListView_AddItem($listSoftware, $iCount[$i][0] & " " & $iCount[$i][1]) _GUICtrlListView_AddSubItem($listSoftware, $i, "Scanning...", 1) _GUICtrlListView_AddSubItem($listSoftware, $i, "Scanning...", 2) _GUICtrlListView_AddSubItem($listSoftware, $i, "Scanning...", 3) Next I added the @error because I realised that if there isn't an ini file, the script wouldn't be able to create an array. However, even with a blank ini file, it still doesn't work. This is the error: (52) : ==> Subscript used with non-Array variable.: For $i = 1 To $iCount[0][0] For $i = 1 To $iCount^ ERROR Thanks for any help. Jeff