Русское сообщество AutoIt

  • Май 20, 2012, 13:18:44 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

Открыт новый раздел Полезняшки - Полезные решения, функции и скрипты в помощь кодеру

:Typing:

Реклама

Автор Тема: [Данные, строки] Как "правильно" считать имена переменных и их значения из внешнего файла?  (Прочитано 1271 раз)

0 Пользователей и 1 Гость смотрят эту тему.

gora [?]

  • Новичок
  • *
  • Репутация: 8
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 182
  • Версия AutoIt: 3.3.8.0
    • Награды
Имеется внешний файл (умышленно не использую слово ini файл, хотя он и называется Settings.ini) следующего содержания:

Для считывания имен переменных и их значений из этого файла использую следующий код:
Код: AutoIt [Выделить]
Dim $fcprt, $errN, $copir
;   переменные из ini файла, если закомментированы
Dim $modecomp='LZMA', $pattern='MC,DT,TM', $nameModule='7ZSD_LZMA.sfx', $path7Zip='%ProgramW6432%\7-Zip\', $useRAM='100', $compnts=4, $maxlen=12000, $extractwait=300, $finishwait=30, $delrem=1, $beeper=1, $criptArchive=0, $criptHdr=1

;   чтение Settings.ini
$file = FileOpen("Settings.ini", 0)
If $file = -1 Then
    MsgBox(0,"", 'Файл "Settings.ini" отсутствует!!!')
    Exit
EndIf
While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringLeft($line, 1) <> ";" Then
        If $errN = 0 Then
            $errN = 1
            If $line <> "Referal Link" Then $fcprt = 1
        Else
            If StringLeft($line, 1) = "-" Then
                $copir &= " " & $line
            Else
                $array = StringSplit($line, "=")
                Assign($array[1], $array[2], 2)
            EndIf
        EndIf
    EndIf
Wend
FileClose($file)

If Not IsDeclared ("seticon") Then
    MsgBox(0,"", "Переменная seticon не определена в ini файле")
Else
    MsgBox(0,"", "Переменная seticon = " & Eval("seticon"))
EndIf
 

Этот код работает, но мне уже не раз здесь говорили, что он "неправильный".
Obfuscator при запуске ругается на строку Assign($array[1], $array[2], 2)

Подскажите, а как же "правильно" считывать и имена переменных, и их значения из внешнего файла?

Спасибо.




  Записан

AZJIO [?]

gora

Для начала в свой ini в первую строку добавь [set] и проверяй мой пример с ним.

Код: AutoIt [Выделить]
$Ini=@ScriptDir&'\Settings.ini'
$aIni=IniReadSection($Ini, 'set')

; смотрим какой красивый массив
#include <Array.au3>
_ArrayDisplay($aIni, 'Array')

; создаём переменные
For $i = 1 to $aIni[0][0]
    Assign($aIni[$i][0], $aIni[$i][1])
Next


; читаем переменные
$text=''
For $i = 1 to $aIni[0][0]
    $text&=Eval($aIni[$i][0])&@CRLF
Next
MsgBox(0, 'Вот оно', $text)

Обычно я этот метод использую для русификации, но ещё интересное применение вижу - быстрый поиск соответствия. Не нужно искать имя перебирая двумерный массив, достаточно прочитать переменную с этим именем.




  Записан
Вытащи сначала бревно из своего глаза, тогда поймёшь как вытащить сучёк из глаза брата своего.

gora [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 8
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 182
  • Версия AutoIt: 3.3.8.0
    • Награды
AZJIO
У Вас тоже используется Assign($aIni[$i][0], $aIni[$i][1]), а [?]
Цитата
Obfuscator при запуске ругается на строку Assign...




  Записан

gora [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 8
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 182
  • Версия AutoIt: 3.3.8.0
    • Награды
AZJIO  [?]
Цитата
И вообще то при таком небольшом массиве не обязательно применять Assign. Массив уже содержит необходимое, просто сделай функцию поиска _ArraySearch, находишь индекс, читаешь значение.
Я не понял как это, можно пример?




  Записан

AZJIO [?]

gora
Цитата
Я не понял как это, можно пример?
спрашивается для чего я функции даю? Чтоб самому же и делать?

Код: AutoIt [Выделить]
#include <Array.au3>
$aIni=IniReadSection($@ScriptDir&'\Settings.ini', 'set')
MsgBox(0, 'Вот оно', $aIni[_ArraySearch($aIni, '-vs "FileVersion')][1])




  Записан

gora [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 8
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 182
  • Версия AutoIt: 3.3.8.0
    • Награды
AZJIO  [?]
Цитата
Чтоб самому же и делать?
Ну потерпите немного, я ж только учусь.

Если я Вас правильно понял, то вместо переменной $path7Zip в скрипте, я должен везде буду использовать выражение:
Код: AutoIt [Выделить]
$aIni[_ArraySearch($aIni, 'path7Zip')][1]
1 Это конечно усложнит скрипт, т.к., переменная используется около 20 раз.
2 Остался вопрос, как быть с предустановленным значением этой переменной? У меня она определена во второй строке скрипта, а тут получается, что и переменной $path7Zip у меня в скрипте больше не будет??




  Записан

AZJIO [?]

gora
почему бы не использовать IniRead?

Код: AutoIt [Выделить]
$path7Zip=IniRead($Ini, 'set', 'path7Zip', '%ProgramW6432%\7-Zip\')




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
Вопрос по "Рекомендациям использованию имен переменных в скриптах"
AutoIt для новичков
Belfigor 13 3216 Последний ответ Октябрь 02, 2009, 15:02:09
от CreatoR
[Данные, строки] Как "вытащить" данные от "return"при использовании "call"?
AutoIt для новичков
akoulev 9 3084 Последний ответ Октябрь 28, 2009, 01:23:30
от Yashied
[Данные, строки] При выводе данных на экранную форму символ "/" самопроизвольно меняется на "."
AutoIt для новичков
Linaleks 2 2527 Последний ответ Ноябрь 02, 2010, 11:58:00
от Linaleks
[Автоматизация] считать файл в элемент "Edit"
AutoIt для новичков
damien2008 9 987 Последний ответ Ноябрь 21, 2010, 18:14:06
от damien2008
[Данные, строки] Перекодировать символы в файле "\u041f\u0435\u0440\u0432", удалить все "Enter"
AutoIt для новичков
ol1o 8 2544 Последний ответ Февраль 09, 2011, 22:04:08
от Kaster
[РЕШЕНО][Данные, строки] Добавление спе.символа "\" к пути каталога
AutoIt для новичков
gberc 8 817 Последний ответ Февраль 28, 2011, 00:35:26
от CreatoR
как правильно Run("C:\r\no.bat","",@SW_HIDE) ;отсылаем сообщение
AutoIt для новичков
gagarin74 5 730 Последний ответ Август 17, 2011, 14:16:28
от Kaster
[Окна, Диалоги] Как правильно считать имена окон, закладок и элементов списка?
AutoIt для новичков
akoulev 0 386 Последний ответ Август 18, 2011, 23:38:42
от akoulev
[Данные, строки] Недостающие #include <........ .au3> В папке "Include" - Где скачать?
Общение
RavdonikaS 6 536 Последний ответ Сентябрь 20, 2011, 08:36:52
от Kaster
Перенесено: [Данные, строки] Недостающие #include <........ .au3> В папке "Include" - Где скачать?
AutoIt для новичков
Kaster 0 245 Последний ответ Сентябрь 20, 2011, 08:37:03
от Kaster


Реклама

* Последние сообщения на форуме
post Re: Проблема с циклами While
[AutoIt для новичков] Andeangl Сегодня в 13:15:19
post Re: Уроки программирования и автоматизации посредством AutoIt для чайников
[Инструменты и помощь по AutoIt] ynbIpb Сегодня в 13:15:02
post Re: [Мышь, клавиатура] Привязка клика по координатам к клавише
[Стол заказов] megatoxx Сегодня в 12:41:37
post Re: Проблема с циклами While
[AutoIt для новичков] Yashied Сегодня в 12:14:25
post Сглаживание рывков при передачи новых координат игрока по TCP/IP
[Общение] Ganibal95 Сегодня в 12:10:37
post Перенесено: Уроки программирования и автоматизации посредством AutoIt для чайников
[AutoIt для новичков] Yashied Сегодня в 12:09:28
post Re: Защита исходного кода программы
[AutoIt для новичков] iamOmg Сегодня в 12:09:05
post Проблема с циклами While
[AutoIt для новичков] Andeangl Сегодня в 11:03:15
post Уроки программирования и автоматизации посредством AutoIt для чайников
[Инструменты и помощь по AutoIt] aak Сегодня в 09:41:45
post Re: Как спарсить ссылку внутри тега "td" определенного класса
[Регулярные выражения и прочее] eropov Сегодня в 05:27:00

* Пользователи онлайн
  • Dot Гостей: 112
  • Dot Скрыт: 2
  • Dot Пользователей: 32
  • Dot Пользователи Online: