Показать полную графическую версию : [решено] Считать инфу из разделов INI файла в разные массивы.
FlatX007
23-01-2010, 17:11
Вообщем интересует как считать инфу(все ключи и значения) из разделов INI файла в разные! массивы. По одному массиву для каждого раздела. Или в многомерный массив. Не знаю как лучше.
Я знаю как это сделать ... но если разделов 20 или 30 ... неохота для каждого прописывать.
Посмотри IniReadSectionNames и IniReadSection
FlatX007
23-01-2010, 18:37
Я знаю как это сделать ... но если разделов 20 или 30 ... неохота для каждого прописывать. »
#Include <Array.au3>
$fINI= @ScriptDir & '\File.ini'
$var = IniReadSectionNames($fINI)
If Not @error Then
Dim $ar[UBound($var)]
For $i=1 To $var[0]
$ar[$i]=IniReadSection($fINI,$var[$i])
If Not @error Then _ArrayDisplay($ar[$i])
Next
EndIf
FlatX007
23-01-2010, 19:21
Во первых с ошибками и не работает ... я тоже думал просто сначало.
для каждого прописывать »
Тогда я ничего не понял: что прописывать?
Во первых с ошибками и не работает ... я тоже думал просто сначало »
$fINI - путь к ini-файлу
#Include <Array.au3>
$sIniFile = @DesktopDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@DesktopDir) & '\File.ini'
$aSectNames = IniReadSectionNames (http://www.autoitscript.com/autoit3/docs/functions/IniReadSectionNames.htm)($sIniFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) IsArray (http://www.autoitscript.com/autoit3/docs/functions/IsArray.htm)($aSectNames) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aAllSections[$aSectNames[0]+1]
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aSectNames[0]
$aCurrentSection = IniReadSection (http://www.autoitscript.com/autoit3/docs/functions/IniReadSection.htm)($sIniFile, $aSectNames[$i])
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$aCurrentSection[0][1] = $aSectNames[$i]
$aAllSections[$i] = $aCurrentSection
_ArrayDisplay($aAllSections[$i])
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
FlatX007
23-01-2010, 22:49
Ничё непонимаю ... и как мне вытащить из этого массива что либо ?
как мне вытащить из этого массива что либо ? »
$sIniFile = @DesktopDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@DesktopDir) & '\File.ini'
$aSectNames = IniReadSectionNames (http://www.autoitscript.com/autoit3/docs/functions/IniReadSectionNames.htm)($sIniFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) IsArray (http://www.autoitscript.com/autoit3/docs/functions/IsArray.htm)($aSectNames) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit) MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, 'Error', 'No Sections found (or file does not exists).')
Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aAllSections[$aSectNames[0] + 1]
$aAllSections[0] = $aSectNames[0]
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aSectNames[0]
$aCurrentSection = IniReadSection (http://www.autoitscript.com/autoit3/docs/functions/IniReadSection.htm)($sIniFile, $aSectNames[$i])
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$aCurrentSection[0][1] = $aSectNames[$i]
$aAllSections[$i] = $aCurrentSection
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
;Вытаскиваем данные из массива массивов :)...
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $j = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aAllSections[0]
;Получаем массив из N-ого элемента общего массива (содержит массив в каждом элементе)
$aCurrentSection = $aAllSections[$j]
;Печатаем имя секций, которое содержится в первом элементе второго измерения (это двумерный массив)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)("[" & $aCurrentSection[0][1] & "]" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF))
;Печатаем все ключи и их значения
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $x = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aCurrentSection[0][0]
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)($aCurrentSection[$x][0] & "=" & $aCurrentSection[$x][1] & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF))
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)(@CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF))
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
FlatX007
24-01-2010, 09:53
И как мне вывести в окно сообщения (MsgBox) - первое значение, допустим, из 2 раздела (всего их 5) INI файла - что бы (MsgBox) - находился не в цикле.
Я вопрос наверно не правильно задал, мне нужно по другому.
Мне вот так нужно заполнить массив ... только у меня не работает почему-то, заполняется только последний элемент массива елементами из последней секции INI файла.
#Include <Array.au3>
;~ $sPathIni = @ScriptDir & '\Original Library\Olf.ini'
$sPathIni = @WindowsDir & "\win.ini"
$aSectionNames = IniReadSectionNames($sPathIni)
If Not (@error) Then
For $i = 1 To $aSectionNames[0]
$aIniRead = IniReadSection($sPathIni, $aSectionNames[$i])
If Not (@error) Then
Global $aArray[UBound($aSectionNames)][UBound($aIniRead)]
For $i1 = 1 To $aIniRead[0][0]
$aArray[$i][$i1] = $aIniRead[$i1][1]
Next
EndIf
Next
EndIf
_ArrayDisplay($aArray)
Вообщем ничего не понятно ... и ничего не получается.
И как мне вывести в окно сообщения (MsgBox) - первое значение, допустим, из 2 раздела (всего их 5) INI файла - что бы (MsgBox) - находился не в цикле. »
$aSecondSection = $aAllSections[2]
MsgBox(64, "", $aSecondSection[1][1])
Мне вот так нужно заполнить массив »
Это на мой взгляд сложнее для разбора.
FlatX007
24-01-2010, 11:44
Это на мой взгляд сложнее для разбора. »
И всё же можно поправить мой пример ? что бы мне знать.
И всё же можно поправить мой пример ? »
Ну он неправильный, как ты будешь различать, к какой секций относится определённое значение?
Можно сделать так например, но это может привести к достижению ограничения в размерности массива:
#Include <Array.au3>
;~ $sPathIni = @ScriptDir & '\Original Library\Olf.ini'
$sPathIni = @WindowsDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@WindowsDir) & "\win.ini"
$aSectionNames = IniReadSectionNames (http://www.autoitscript.com/autoit3/docs/functions/IniReadSectionNames.htm)($sPathIni)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) (@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error)) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aArray[$aSectionNames[0]+1][1]
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aSectionNames[0]
$aIniRead = IniReadSection (http://www.autoitscript.com/autoit3/docs/functions/IniReadSection.htm)($sPathIni, $aSectionNames[$i])
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) (@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error)) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ReDim (http://www.autoitscript.com/autoit3/docs/keywords.htm#ReDim) $aArray[$aSectionNames[0]+1][$aIniRead[0][0]+1]
$aArray[$i][0] = $aSectionNames[$i]
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i1 = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aIniRead[0][0]
$aArray[$i][$i1] = $aIniRead[$i1][1]
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
_ArrayDisplay($aArray)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Или так, где имя секций повторяется для всех её значений:
#Include <Array.au3>
;~ $sPathIni = @ScriptDir & '\Original Library\Olf.ini'
$sPathIni = @WindowsDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@WindowsDir) & "\win.ini"
$aSectionNames = IniReadSectionNames (http://www.autoitscript.com/autoit3/docs/functions/IniReadSectionNames.htm)($sPathIni)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) (@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error)) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aArray[1][3]
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aSectionNames[0]
$aIniRead = IniReadSection (http://www.autoitscript.com/autoit3/docs/functions/IniReadSection.htm)($sPathIni, $aSectionNames[$i])
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) (@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error)) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i1 = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aIniRead[0][0]
$aArray[0][0] += 1
ReDim (http://www.autoitscript.com/autoit3/docs/keywords.htm#ReDim) $aArray[$aArray[0][0]+1][3]
$aArray[$aArray[0][0]][0] = $aSectionNames[$i]
$aArray[$aArray[0][0]][1] = $aIniRead[$i1][0]
$aArray[$aArray[0][0]][2] = $aIniRead[$i1][1]
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
_ArrayDisplay($aArray)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
FlatX007
24-01-2010, 14:14
как ты будешь различать, к какой секций относится определённое значение? »
Так я изначально знаю какие секции будут в INI файле :), имена ключей мне не нужны, нужна секция и все значения ключей в ней.
Вот теперь то что нужно !
Или так, где имя секций повторяется для всех её значений: »
Кто подскажет как работать с полученной инфой? Найти допустим Имя секций, если такое имеется то найти там параметр, если параметр существует, то считать значение параметра в переменную. имена задаются вручную,только значение параметра надо Узнать.
Кто подскажет »
В этой теме никто, т.к оно не связано.
Не понел юмора :) . Может тогда хоть направление какое? :(
Andress, создавай новую тему. правило простое: один вопрос - одна тема
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.