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
Telegram jollycoder

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.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

26

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

Несколько раз вставить код из 23, правда ведь не сложно?

27 (изменено: belyankin12, 2017-04-19 17:24:25)

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

Foma, мой предыдущий пост был ответом stealzy, а не Malcev, его код я ещё использую.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

28

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

Забавно наблюдать эту попытку объяснить детали своей проблемы на одном пальце из пяти, одной руки, ссылаясь при этом на наличие остальных и искренне веря, что сказанного, точно достаточно.

Вероятно, если бы это было действительно ТАК, то проблема бы вряд ли освещалась бы так настойчиво, с участием всё того же, одного пальца. А глупые люди, всё никак не поймут, в чём у Вас проблема. Досадно.

Если не приводите пример, демонстрирующий ситуацию, смоделируйте в отдельном проекте похожее поведение из тех строк, к участию в проблеме которых апеллируете в этом посыле. Если всё сложится удачно и проблема будет решена, то LvlUp не заставит себя ждать. Если смоделированный участок будет генерировать ту же проблему, но постичь её будет делом невероятной сложности, продублируйте код в эту беседу, чтобы она стала действительно предметной. В противном случае, придётся заниматься этим выносом мозга себе довольно долго, пока не будет усвоена оптимальная методика написания сценария, дабы потом была легче навигация по структуре собственной разработки.

И если бы "IniWrite" действительно работала некорректно, то длилось бы это не настолько долго, чтобы у Вас с этим могла возникнуть проблема, не решённая в последних обновлениях.

29

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

belyankin12 пишет:

Я вижу все такие умные. Повторяю в сотый раз.

А смысл? Если вы уверены, что IniWrite работает некорректно, нужно обращаться не на этот форум, а к разработчику АНК. Здесь вам могут помочь только в том случае, если баг в вашем коде. IniWrite здесь никто исправить не может.

30

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

belyankin12 пишет:

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

Может Вы изменили содержимое файла File.ahk, как и в первом сообщении?

31

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

KusochekDobra, пример есть, смоделированный в первом посте. Я могу предоставить вам весь код, но желаете ли вы копаться в 5 тысячах строчек? Я о вас тоже думаю, тут все работают на энтузиазме, эгоистично будет заставлять людей копаться в таком. А о каких обновлениях вы говорите? Впервые слышу о том, что AHK регулярно обновляется).

ypppu, вы о том, что я допустил ошибку посте, где пример include был? То была механическая ошибка, в скрипте все изначально было правильно (просто я сначала начал писать в примере от памяти, а потом подумал, что лучше скопировать сразу, а то, что от памяти написал стереть забыл ).

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

32

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

В общем все решилось заменой имени переменной. А для объяснения этой ситуации есть научный термин: "странно".

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

33

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

belyankin12 пишет:

А для объяснения этой ситуации есть научный термин: "странно".

Скорее, ваша невнимательность.

34

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

belyankin12 пишет:

...пример есть, смоделированный в первом посте. Я могу...

Пример - это не форма, описывающая лично Ваше абстрактное понимание того, в чём может быть проблема, а предмет, заключающий в себя её основание, чем наглядно её и демонстрирующий. Пример вроде - "У меня не работает, потому что что-то пошло не так..." - не многим отличается от первого.

У меня, Ваш пример делает ровно то, что описывает. Никаких файлов с названием "ERROR" и без расширения нет. В инпутбоксе ввожу "on" -> соответствующее изменение происходит в ИНИ. В этой связи, целиком разделяю мнение всех попытавшихся помочь, склоняющееся к Вашей невнимательности.