1 (изменено: Indomito, 2015-07-13 07:56:46)

Тема: AHK: Параметризированное работа с INI файлом - аналог IniRead

Приветствие, всем.

Как динамически произвести скажем чтение из ini-файла на уровне функции.

Например написал функцию fnReadINI(OutputVarINI,varFilenameINI, varSectionINI, varKeyINI)
C параметрами OutputVarINI и varFilenameINI всё нормально, но вот Секция и Ключ это не переменные.
Попробовал использовать модификатор ByRef, это конечно не помогло.


Поискал и нашёл на GitHub.com библиотеку Ini.ahk, но увы она не работает или работает не так как мне нужно.

Подскажите мне, что ни будь готовое и работающее, если не сложно.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

2 (изменено: Alectric, 2015-07-13 08:10:12)

Re: AHK: Параметризированное работа с INI файлом - аналог IniRead

Не переменные в функцию передаются в кавычках, на сколько мне известно.

myfunc("text")

myfunc(a)
{
 Msgbox,% a
}
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

3

Re: AHK: Параметризированное работа с INI файлом - аналог IniRead

Блин, неужели проблема действительно в этом?

4

Re: AHK: Параметризированное работа с INI файлом - аналог IniRead

А у меня нет кавычек, я даже код не привёл или вы про что?

Ааа... думаете, если секцию и ключ заключить в кавычки то сработает?

Нет, я так уже пытался сделать... мимо, т.е. не получается.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

5 (изменено: Indomito, 2015-07-13 08:17:50)

Re: AHK: Параметризированное работа с INI файлом - аналог IniRead

YMP да я же проверял - не получилось.

Покажите пример с IniRead с кавычками, может я где то накосячил...

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

6

Re: AHK: Параметризированное работа с INI файлом - аналог IniRead

Сорри.... я "дурилка картонная"(не знаю что это).

Всё работает

a:= "Main"
varFilenameINI:="c:\AHK\KeysExtSkyrim\KeysExtSkyrim.res\Bats.ini\sample.ini"
OutputVarINI := fnTest(0, varFilenameINI, a, "Name")
;OutputVarINI := fnTest(0, varFilenameINI, "Main", "Name")
MsgBox %OutputVarINI%
return

fnTest(OutputVarINI,varFilenameINI, varSectionINI, varKeyINI)
{

IniRead, OutputVarINI, %varFilenameINI%, % varSectionINI, % varKeyINI

Return OutputVarINI
}

Видимо где опечатался.

Спасибо тебе Alectric, а я думал ты прикалываешься.

Решено.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

7

Re: AHK: Параметризированное работа с INI файлом - аналог IniRead

fnTest(OutputVarINI,varFilenameINI, varSectionINI, varKeyINI)

Какие то хитрые новейшие приёмы. Поделитесь с нами тайным назначением первого параметра - OutputVarINI?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8 (изменено: Indomito, 2015-07-13 14:27:49)

Re: AHK: Параметризированное работа с INI файлом - аналог IniRead

serzh82saratov я случайно кусок прихватил из готового скрипта.

+ Вот полностью

arIniErrorTXT :=  ["отсутствует INI-файл"                                     ; = 1
                  ,"в имени переменной/её нет/ошибка в имени секции."         ; = 2
                  ,"переменная не может быть пустой."                         ; = 3
                  ,"переменная содержит недопустимое значение."               ; = 4
                  ,"резерв или ошибка в программе."]                          ; = 5  


;--------------------Чтение переменной из INI и проверка-------------------------------------                  
;ВХОД: 
;1-й ByRef OutputINI
;2-й ByRef Skay True/False  = тип выхода см. ВЫХОД  Вариант №1/№2
;3-й FilenameINI 
;При необходимости 
;4-й SectionINI умолчанию = ""
;5-й KeyINI умолчанию = ""

;ВЫХОД:
;1-й ByRef OutputINI - считанное значение
;В Return(Вариант №1)  True/False/-1 - Ок/Пустая переменная/В ByRef Skay код ошибки
;В Return(Вариант №2)  True/False/-1 - Ок/Пустая переменная/Автовыход из игры(не передаётся)


fnIniReadAndСheck(ByRef OutputINI, ByRef Skay := False, FilenameINI, SectionINI := "", KeyINI := "")
{
  if FileExist(FilenameINI)
        IniRead, OutputINI, %FilenameINI%, % SectionINI, % KeyINI
      Else
        {
          NumError := 1
          If (Skay)
              {
                Skay  :=  NumError
                Return -1
              }
            Else
              {
                fnIniErrorOut(NumError, FilenameINI, SectionINI,  KeyINI) ; нет файла
                Return
              }
        } 

  if ((OutputINI) && (OutputINI != "ERROR"))
        Return True
       
  If (!OutputINI) ; Пустая переменная
        Return False
       
  If (OutputINI = "ERROR") ;
        {
          NumError := 2
          If (Skay)
              {
                Skay  :=  NumError
                Return -1
              }
            Else
              fnIniErrorOut(NumError := 2, FilenameINI, SectionINI,  KeyINI) ; не верная переменная или секция
              Return
        }

}
;--------------------------------------------------------------------------------------------

;--------------------Диагностика об ошибках в INI (fnIniReadAndСheck)------------------------
fnIniErrorOut(NumError := 0, FilenameINI := "", SectionINI := "",  KeyINI := "", SecWait :=  15)
{
  Error_TXT :=  arIniErrorTXT[NumError]
  cWait :=  SecWait
  Gosub lMinWinGameKeys
    cTitle      :=  "Ошибка в INI-файле" ;Титул MsgBox
    cMsgErr     :=  "`n Ошибка : " Error_TXT
    cTxtErrAd1  :=  "`n Файл : " FilenameINI
    cTxtErrAd2  :=  "`n Секция = [" SectionINI "] `n Ключ = " KeyINI
    ;cWait       :=  35
    cTxtErrAd3  :=  "`n`n Выход из программы(Тайм-аут = " cWait " сек)."
      MsgBox % сMsgBoxError_Ok, %cTitle%, %cMsgErr% %cTxtErrAd1% %cTxtErrAd2% %cTxtErrAd3%, %cWait%      
    Gosub lExitTotalKeys
Return
}
;--------------------------------------------------------------------------------------------

Осталось понять что надо написать в заголовке, что бы из функции вызвать функцию по переданным значениям.
Я про это - fnIniReadAndСheck(ByRef OutputINI, ByRef Skay := False, FilenameINI, SectionINI := "", KeyINI := "").

А то сравнение ключей меня запутает окончательно.


P.S. Хотя можно подпрограмму, а то с функцией что то не складывается. Значит передать просто метку.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro