Что нового

Как прочитать ini файл в цикле?

Lawrmini

Новичок
Сообщения
31
Репутация
0
ДВС всем.
Подскажите как прочитать ini файл через цикл.
Суть проблемы. Есть ini файл с секцией в которой 80 строк. Типа
[CWM]
f1 = 023688
f1 = 26987789
...
...
f80 = 893892

Нужно прочитать и получить 80 переменных в виде

1cell = 023688
2cell = 26987789
...
...
80cell = 893892

Количество вводит юзер.


В голову пришла только одна мысль через Ifelse.
Код:
if $i = 5 then
    ; Считываем суммы пустых слотов
    global $c1fi = IniRead ( "config.ini", "FCRS", "1cell", 0 )
    global $c2fi = IniRead ( "config.ini", "FCRS", "2cell", 0 )
    global $c3fi = IniRead ( "config.ini", "FCRS", "3cell", 0 )
    global $c4fi = IniRead ( "config.ini", "FCRS", "4cell", 0 )
    global $c5fi = IniRead ( "config.ini", "FCRS", "5cell", 0 )
      
	  ElseIf $shop = 6 Then
	  ; Считываем суммы пустых слотов
    global $c1fi = IniRead ( "config.ini", "FCRS", "1cell", 0 )
    global $c2fi = IniRead ( "config.ini", "FCRS", "2cell", 0 )
    global $c3fi = IniRead ( "config.ini", "FCRS", "3cell", 0 )
    global $c4fi = IniRead ( "config.ini", "FCRS", "4cell", 0 )
    global $c5fi = IniRead ( "config.ini", "FCRS", "5cell", 0 )
    global $c6fi = IniRead ( "config.ini", "FCRS", "6cell", 0 )


пока таким макаром дойду до 80 код вырастет раз в 10.
Только что проверил на 10 ifelse скорость ужасна. Про 80 даже думать страшно.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Lawrmini
При помощи функции
Код:
IniReadSection()
считываете сразу всю секцию в массив. После этого выбираете из массива нужное пользователю количество элементов.
 
Автор
L

Lawrmini

Новичок
Сообщения
31
Репутация
0
считываете сразу всю секцию в массив. После этого выбираете из массива нужное пользователю количество элементов.

С этим проблемы нету. Я уже смотрел в сторону
Код:
IniReadSection()


Проблема как собрать имена переменных. Я понимаю что через цикл
Код:
FOR



Нужно получить
Код:
$f1 =  $var[1][1]
...
$f80 = $var[80][1]

Как в этом коде собрать имена вида $f1 .... $f80?

Код:
$var = IniReadSection("config.ini", "CWW")
If @error Then
    MsgBox(4096, "", "ini файл не найден")
Else
    For $i = 1 To $var[0][0]
		 $x = $var[$i][1]
		 MsgBox (0,"",$x)
    Next
EndIf
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Lawrmini
как собрать имена переменных
В массив, конечно. Визуально отличаться будет только наличием скобок
Код:
Global $f[81]
$f[1] = $var[1][1]
...
$f[80] = $var[80][1]



Есть ещё функция
Код:
Assign("f" & $i, $var[$i][1])
Но извлекать значения из таких переменных придётся через
Код:
Eval()
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
хм...не совсем понятно, а зачем вам 80 переменных? Не проще будет использовать массив? Принцип то по сути тот же, но гораздо проще организовывать циклы. Да и использование будет удобней.
 
Автор
L

Lawrmini

Новичок
Сообщения
31
Репутация
0
mr.Gbabak
хм...не совсем понятно, а зачем вам 80 переменных? Не проще будет использовать массив? Принцип то по сути тот же, но гораздо проще организовывать циклы. Да и использование будет удобней.

Эти переменные результат
Код:
PixelChecksum()
При самом первом запуске скрипта записываются в config.ini. При следующем запуске скрипта , чтоб не сканировать экран по новой они считываются из ini файла и зоносятся в Global переменные. Они не меняются весь скрипт. А используются раз в пару минут. И раз в пару минут использовать перебор массива?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Lawrmini
И раз в пару минут использовать перебор массива?
Почему нет? К тому же это будет в 100500 раз быстрее чтения файла конфигурации. И жёсткий диск не нагружает.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Ну я бы так и сделал...
Но вот ваше решение:
Код:
$massiv=IniReadSection(@ScriptDir&'/config.ini', 'CWM')

$a=7; задается количество....эээ, сколько переменных создать надо...

For $i = 1 To $a
	Assign($i&"Cell", $massiv[$i][1]) ;объявляется переменная
Next

For $i = 1 To $a
	MsgBox (0,$massiv[$i][0],Eval($i&"Cell"))
Next
 
Автор
L

Lawrmini

Новичок
Сообщения
31
Репутация
0
InnI [?]
Почему нет? К тому же это будет в 100500 раз быстрее чтения файла конфигурации. И жёсткий диск не нагружает.

Ini считывается один раз при старте. Сейчас побробую чтоб работало с массивом.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Lawrmini
Просто, я когда-то наступил на эти грабли))
Я тогда прописывал кучу переменных...но со временем добавлялся функционал и становилось сложнее переписывать код.
 
Верх