1 (изменено: belyankin12, 2017-04-18 22:12:18)

Тема: AHK: Некорректная работа IniWrite

Здравствуйте. Проблема следующая: записываю я какие-то данные в Ini файл через IniWrite. В качестве пути к ini файлу используется переменная, которая включена в include. Все работало раньше отлично, а теперь же вдруг перестало. Вместо записи в нужный мне ini. Создается файл в корневой папке скрипта с названием ERROR но без всякого расширения (просто файл без расширения). Если открыть его блокнотом, то видно, что в этом файле записаны нужные мне данные. Опытным путем узнал, что такое происходит только если в качестве пути к файлу указать переменную. Не обращался бы по такой мелочи сюда, если бы не был уверен, что все у меня записано правильно. Код скрипта не изменялся, includ'ы не трогал, а до этого все работало.
Привожу пример проблемного кода:


	 #include %A_ScriptDir%\plugins\file.ahk
     inputbox, PlayerID
     sleep 500
     
     if (PlayerID = "on") {
          IniWrite, {9ACD32}on, %mode%, Modes, Blacklist
         msgbox, Black List: Режим проверки по таргету включен
          return
	}

File.ahk


Global mode := A_ScriptDir "\cache\mode.ini"

Созданный файл в корневой папке скрипта (файл с названием ERROR без расширения):


[Modes]
Blacklist={FF0000}off

Такие вот дела. Не знаю даже что делать... Помогите пожалуйста, если знает кто.

2

Re: AHK: Некорректная работа IniWrite

Что должен делать код в файле File.ahk?

3

Re: AHK: Некорректная работа IniWrite

ypppu, там хранится набор функций и глобальных переменных. Все мои примеры это вырезки, ибо что основной скрипт, что include по несколько тысяч строк.

4 (изменено: ypppu, 2017-04-18 20:00:34)

Re: AHK: Некорректная работа IniWrite

Переменной mode дважды присваивается значение в одной строке?

5

Re: AHK: Некорректная работа IniWrite

Нет, переменная mode это та, что я указал в примере. Я скопировал её прямо из своего Include. Больше mode нету.

6

Re: AHK: Некорректная работа IniWrite

belyankin12 пишет:

Не знаю даже что делать...

Проверять значение переменной перед записью ini. По-моему, это очевидно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7

Re: AHK: Некорректная работа IniWrite

teadrinker, по-моему я проверял. Я же сказал, все это раньше работало. Значения есть.

8

Re: AHK: Некорректная работа IniWrite

Подтверждение этому можно найти, прочитав мой пост. Скрипт записывает в файл ERROR все нужные данные, они же не взялись с воздуха).

9 (изменено: Malcev, 2017-04-18 20:55:44)

Re: AHK: Некорректная работа IniWrite

belyankin12 пишет:

Все мои примеры это вырезки, ибо что основной скрипт, что include по несколько тысяч строк.

Ну так и ищите в каком месте ваша переменная mode получает значение ERROR.

10

Re: AHK: Некорректная работа IniWrite

Malcev, есть ли какой-нибудь способ выводить все переменные на экран? Слышал что в SciTE4 можно как-то.

11

Re: AHK: Некорректная работа IniWrite

Перед IniWrite вставьте команду MsgBox, %mode% чтобы проконтролировать содержимое этой переменной.

12

Re: AHK: Некорректная работа IniWrite

Это мне не поможет никак. Даже если я узнаю, что mode вдруг слал ERROR, то я не смогу понять почему он принял такое значение. У меня есть несколько обращений к mode в скрипте, итого где-то 10 IniWrite, разбросанных по всему скрипту.

13

Re: AHK: Некорректная работа IniWrite

Ну а как Вы думали? Необходимо отследить цепочку действий пошагово. Когда пишешь скрипт на несколько тыщ строк, нужно предусмотреть очень многое. В том числе методику контроля.

14

Re: AHK: Некорректная работа IniWrite

А при чем здесь IniWrite?
Смотрите где у вас в IniRead присуждается переменной mode слово ERROR.

15

Re: AHK: Некорректная работа IniWrite

Отступился от своих принципов и просто изменил имя переменной. Все заработало. Но очень интересно, почему?)

16

Re: AHK: Некорректная работа IniWrite

Malcev, не понимаю к чему вы клоните. На IniRead cмотреть рано потому, что у меня скрипт не записывает вообще данные в нужный мне ini. Если данных нету, то и читать нечего.

17

Re: AHK: Некорректная работа IniWrite

Читайте справку:
https://autohotkey.com/docs/commands/IniRead.htm

Default
    The value to store in OutputVar if the requested key is not found. If omitted, it defaults to the word ERROR. To store a blank value (empty string), specify %A_Space%.

18

Re: AHK: Некорректная работа IniWrite

Понимаете в чем дело то? Я не читаю из INI, я записываю в него. Mode служит вторым параметром, что указывает путь к файлу.  В итоге у меня не записывается ничего в файл, который под переменной mode, а создается файл с именем ERROR без расширения в корне скрипта. IniRead тут не при чем. Переменная mode берется из инклуда, она постоянная, я не добываю её из ini.

19

Re: AHK: Некорректная работа IniWrite

belyankin12 пишет:

Переменная mode берется из инклуда, она постоянная, я не добываю её из ini.

Значит где-то она перезадается.
А насчет iniread я написал, потому что не знаю ни одной команды в автохотки, кроме IniRead, которая может присудить переменной слово "ERROR".

20

Re: AHK: Некорректная работа IniWrite

Malcev, вот в том то и дело. Интересно то, что из примерно десяти команд, которые записывают данные в mode, умерли сразу штук 7. Несколько обращений до сих пор работают корректно. Я даже брал ту переменную mode копировал из работающих команд и вставлял в неработающие - ноль резолта.

21

Re: AHK: Некорректная работа IniWrite

То есть у вас в коде нет таких строк?

IniRead, %mode%

22 (изменено: belyankin12, 2017-04-18 23:08:54)

Re: AHK: Некорректная работа IniWrite

Malcev, нет. Во второй параметр нельзя вставлять переменную в процентах - скрипт не запустится. Есть такое: IniRead, var, %mode%, Modes, Fight.

23

Re: AHK: Некорректная работа IniWrite

Раз не можете самостоятельно определить где меняется переменная, то можете расставить после каждой строчки или блока кода:

if (mode = "ERROR")
   msgbox % A_LineFile "`n" A_LineNumber - 2

24

Re: AHK: Некорректная работа IniWrite

Почему "Некорректная работа IniWrite"? Может лучше "Запутался в переменных"?

25 (изменено: belyankin12, 2017-04-19 16:57:41)

Re: AHK: Некорректная работа IniWrite

Я вижу все такие умные. Повторяю в сотый раз. Переменная mode используется только в качестве global  только в Include. Больше нет ни одной функции, либо условия, которая присваивает что либо переменной mode. Переменная mode постоянная и её значение известно уже при запуске скрипта, а точнее, когда скрипт доходит до include.