-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Считать инфу из разделов INI файла в разные массивы.
Вообщем интересует как считать инфу(все ключи и значения) из разделов INI файла в разные! массивы. По одному массиву для каждого раздела. Или в многомерный массив. Не знаю как лучше.
Я знаю как это сделать ... но если разделов 20 или 30 ... неохота для каждого прописывать.
|
Посмотри IniReadSectionNames и IniReadSection
|
Цитата:
Цитата FlatX007
Я знаю как это сделать ... но если разделов 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
для каждого прописывать »
|
Тогда я ничего не понял: что прописывать?
Цитата:
Цитата FlatX007
Во первых с ошибками и не работает ... я тоже думал просто сначало »
|
$fINI - путь к ini-файлу
|
Ничё непонимаю ... и как мне вытащить из этого массива что либо ?
|
Цитата:
Цитата FlatX007
как мне вытащить из этого массива что либо ? »
|
Код:
$sIniFile = @DesktopDir & '\File.ini'
$aSectNames = IniReadSectionNames($sIniFile)
If Not IsArray($aSectNames) Then Exit MsgBox(16, 'Error', 'No Sections found (or file does not exists).')
Dim $aAllSections[$aSectNames[0] + 1]
$aAllSections[0] = $aSectNames[0]
For $i = 1 To $aSectNames[0]
$aCurrentSection = IniReadSection($sIniFile, $aSectNames[$i])
If Not @error Then
$aCurrentSection[0][1] = $aSectNames[$i]
$aAllSections[$i] = $aCurrentSection
EndIf
Next
;Вытаскиваем данные из массива массивов :)...
For $j = 1 To $aAllSections[0]
;Получаем массив из N-ого элемента общего массива (содержит массив в каждом элементе)
$aCurrentSection = $aAllSections[$j]
;Печатаем имя секций, которое содержится в первом элементе второго измерения (это двумерный массив)
ConsoleWrite("[" & $aCurrentSection[0][1] & "]" & @CRLF)
;Печатаем все ключи и их значения
For $x = 1 To $aCurrentSection[0][0]
ConsoleWrite($aCurrentSection[$x][0] & "=" & $aCurrentSection[$x][1] & @CRLF)
Next
ConsoleWrite(@CRLF)
Next
|
И как мне вывести в окно сообщения (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)
Вообщем ничего не понятно ... и ничего не получается.
|
Цитата:
Цитата FlatX007
И как мне вывести в окно сообщения (MsgBox) - первое значение, допустим, из 2 раздела (всего их 5) INI файла - что бы (MsgBox) - находился не в цикле. »
|
Код:
$aSecondSection = $aAllSections[2]
MsgBox(64, "", $aSecondSection[1][1])
Цитата:
Цитата FlatX007
Мне вот так нужно заполнить массив »
|
Это на мой взгляд сложнее для разбора.
|
Цитата:
Цитата Creat0R
Это на мой взгляд сложнее для разбора. »
|
И всё же можно поправить мой пример ? что бы мне знать.
|
Цитата:
Цитата FlatX007
И всё же можно поправить мой пример ? »
|
Ну он неправильный, как ты будешь различать, к какой секций относится определённое значение?
Можно сделать так например, но это может привести к достижению ограничения в размерности массива:
|
Или так, где имя секций повторяется для всех её значений:
Код:
#Include <Array.au3>
;~ $sPathIni = @ScriptDir & '\Original Library\Olf.ini'
$sPathIni = @WindowsDir & "\win.ini"
$aSectionNames = IniReadSectionNames($sPathIni)
If Not (@error) Then
Dim $aArray[1][3]
For $i = 1 To $aSectionNames[0]
$aIniRead = IniReadSection($sPathIni, $aSectionNames[$i])
If Not (@error) Then
For $i1 = 1 To $aIniRead[0][0]
$aArray[0][0] += 1
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
EndIf
Next
_ArrayDisplay($aArray)
EndIf
|
Цитата:
Цитата Creat0R
как ты будешь различать, к какой секций относится определённое значение? »
|
Так я изначально знаю какие секции будут в INI файле :), имена ключей мне не нужны, нужна секция и все значения ключей в ней.
Вот теперь то что нужно !
|
Цитата:
Цитата Creat0R
Или так, где имя секций повторяется для всех её значений: »
|
Кто подскажет как работать с полученной инфой? Найти допустим Имя секций, если такое имеется то найти там параметр, если параметр существует, то считать значение параметра в переменную. имена задаются вручную,только значение параметра надо Узнать.
|
В этой теме никто, т.к оно не связано.
|
Не понел юмора :) . Может тогда хоть направление какое? :(
|
Andress, создавай новую тему. правило простое: один вопрос - одна тема
|
Время: 06:01.
© OSzone.net 2001-