Что нового

Перенести массив переменных в скрипт из INI файла

Firestarter

Новичок
Сообщения
54
Репутация
0
Что я пытаюсь выполнить?
Ответ - опишите задачу
Имеется INI примерно такого содержания:
Код:
[Workers]
asic[1]=Kesha
asic[5]=Kornet
asic[12]=Mankor
asic[44]=Sevus

Подскажите плз как мне в скрипте присвоить эти данные в массив?
Беда в том, что цифры в инишном файле не всегда постоянные и меняются, по типу:

Код:
[Workers]
asic[95]=Kesha
asic[8]=Kornet
asic[42]=Mankor
asic[3]=Sevus


Что я ожидаю от выполненных действии?

Вобщем есть ли решение сразу автоматом брать переменные из ини в массив?
В скрипте исходя из последней редакции INIшки должны значиться переменные asic[95],asic[8],asic[42],asic[3] с соответствующими записями.
Что то вроде такого должно получиться, только полкажите верный вариант если есть конечно:

Код:
For $i = 1 to 100
$asic[$i] = IniRead($INI, 'Workers', 'asic[$i]', '')
Next
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
$asic[$i] = IniRead($INI, 'Workers', 'asic[' & $i & ']', '')

Лучше читать в переменную, если она не имеет значение пусто, тогда добавлять в массив
 
Автор
F

Firestarter

Новичок
Сообщения
54
Репутация
0
workers_monitor.au3" (43) : ==> Subscript used on non-accessible variable.:

Ругается именно на эту строку

Код:
42. For $i = 1 to 9
43. $asic[$i] = IniRead($INI, 'Workers', 'asic[' & $i & ']', '')
44. ;MsgBox(0,0,$asic[$i])
45. Next


Ини файл:
Код:
[Workers]
asic[1]=Des1-S9/10.11.2.3:7001
asic[2]=Des2-S9/10.11.2.3:7002
asic[3]=Des3-S9/10.11.2.3:7003
asic[4]=Kesha1-S9/10.9.0.240
asic[5]=Kesha2-S9/10.9.0.244
asic[6]=Kesha3-S9/10.15.9.34:88
asic[7]=Kornet1-T9/192.168.88.210
asic[8]=Kornet2-T9/192.168.88.211
asic[9]=Lez1-T9/10.14.24.59:2001
asic[10]=Lez2-S9/10.14.24.59:2002
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
В массиве $asic число строк не 9


Добавлено:
Сообщение автоматически объединено:

У тебя в ини 10 строк. Значит массив asic должен быть
$asic[10]


Добавлено:
Сообщение автоматически объединено:

Код:
For $i = 0 To Ubound($asic) - 1
;код.......
Next
 
Автор
F

Firestarter

Новичок
Сообщения
54
Репутация
0
даже если в ини убираю последнюю. даже если в цикле ставлю 10. без разницы.


Добавлено:
Сообщение автоматически объединено:

Код:
For $i = 1 to Ubound($asic) - 1
$asic[$i] = IniRead($INI, 'Workers', 'asic[' & $i & ']', '')
MsgBox(0,0,$asic[$i])
Next


В таком варианте MsgBox вобще не отрабатывает. т.е. не выводит никакое окно.


Добавлено:
Сообщение автоматически объединено:

Код
Код:
$i = 54
$asic[$i] = IniRead($INI, 'Workers', 'asic[' & $i & ']', '')
MsgBox(0,0,$asic[$i])


INI
Код:
[Workers]
asic[54]=Des1

Даже так ничего не работает(


Добавлено:
Сообщение автоматически объединено:

кажется разобрался в чем беда. отпишу ответ как проверю точно...
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Массив объявлен?
Код:
Local $asic[10]
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Почему устраивает прочитать всю секцию в массив :
Код:
#include <array.au3>
$IniFile=@ScriptDir&'\1.ini'

$aArray=IniReadSection($IniFile,'Workers')
_ArrayDisplay($aArray)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Firestarter
ты определись точно что тебе нужно. просто считать все данные? читай всю секцию сразу

если нужно читать по порядку 1,2, 3. и так далее, то читай в цикле
Код:
#include <Array.au3>
Local $aR_ini[0], $sread
Local $aIniTest = IniReadSection('test.ini', 'Workers')
For $i = 1 To $aIniTest[0][0]
	$sread = IniRead('test.ini', 'Workers', 'asic[' & $i & ']', '')
	If $sread Then _ArrayAdd($aR_ini, $sread)
Next
_ArrayDisplay($aR_ini)
 
Верх