Автор Тема: Не работает _IniVirtual_Read  (Прочитано 602 раз)

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

Онлайн Vanguger [?]

  • Новичок
  • *
  • Сообщений: 36
  • Репутация: 0
  • Пол: Мужской
    • Webarion
    • Награды
  • Версия AutoIt: 3.3.14.0
Не работает _IniVirtual_Read
« Создано: Август 19, 2018, 10:24:03 »
Что-то не лады с UDF IniVirtual.au3. В примере, ключ почему-то захватывает перенос строки. Результат следующий:

$sKey       = key2
$aKey[2][0] =
key2
---
$sKey       = 0x6B657932
$aKey[2][0] = 0x0A6B657932
$sKey = $aKey[2][0] ? False

Код: AutoIt [Выделить]
#include <IniVirtual.au3>
$sPath = @ScriptDir & '\tmp.ini'
IniWrite ($sPath, "Section", "key1", "111" )
IniWrite ($sPath, "Section", "key2", "222" )
$s_ini_Text = FileRead($sPath)
$aInitVirtual = _IniVirtual_Initial($s_ini_Text)
$sRes = __IniVirtual_Read($aInitVirtual, 'Section', 'key2', 'Default')


Функция в UDF(с тестовыми строками)
Код: AutoIt [Выделить]
Func _IniVirtual_Read($a_Ini_Virtual2D, $sSection, $sKey, $sDefault = '')
    Local $i = _ArraySearch($a_Ini_Virtual2D, $sSection, 1, 0, 0, 2, 1, 0)
    If @error Then Return $sDefault
    Local $aKey = $a_Ini_Virtual2D[$i][1]
;
ConsoleWrite('$sKey       = ' & $sKey & @CRLF)
ConsoleWrite('$aKey[2][0] = ' & $aKey[2][0] & @CRLF)
ConsoleWrite('---' & @CRLF)
ConsoleWrite('$sKey       = ' & StringToBinary($sKey) & @CRLF)
ConsoleWrite('$aKey[2][0] = ' & StringToBinary($aKey[2][0]) & @CRLF)
ConsoleWrite('$sKey = $aKey[2][0] ? ')
ConsoleWrite($sKey = $aKey[2][0])
ConsoleWrite(@CRLF&@CRLF)
;
    $i = _ArraySearch($aKey, $sKey, 1, 0, 0, 2, 1, 0)
    If @error Then Return $sDefault
    Return $aKey[$i][1]
EndFunc   ;==>_IniVirtual_Read

« Последнее редактирование: Август 20, 2018, 18:49:06 от Vanguger »

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

Не работает _IniVirtual_Read
« Отправлен: Август 19, 2018, 10:24:03 »

Онлайн Vanguger [?]

  • Новичок
  • *
  • Сообщений: 36

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Webarion
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Не работает _IniVirtual_Read
« Ответ #1, Отправлен: Август 19, 2018, 11:34:57 »
По всей видимости дело в регулярке функции __IniVirtual_GetKeysVal

Код: AutoIt [Выделить]
$vData = StringRegExp($vData, '(?m)^([^;].*?)\h*=\h*(["'']?)(.*?)\2\r?$', 3)


Не стал заморачиваться с регуляркой, всё заработало, когда немного изменил строку в функции:

Код: AutoIt [Выделить]
$aData2D[$d][0] = StringStripWS($vData[$i], 1)


В итоге функция обрела следующий вид:
Код: AutoIt [Выделить]
Func ___IniVirtual_GetKeysVal($vData)
    $vData = StringRegExp($vData, '(?m)^([^;].*?)\h*=\h*(["'']?)(.*?)\2\r?$', 3) ; учитывает пробелы между элементами и обрамление кавычками
    Local $d, $u = UBound($vData) ; 0 как индикатор ошибки
    Local $aData2D[$u / 3 + 1][2] = [[$u / 3]]
    For $i = 0 To $u - 1 Step 3
        $d = Int($i / 3) + 1
        $aData2D[$d][0] = StringStripWS($vData[$i], 1)
        $aData2D[$d][1] = $vData[$i + 2]
    Next
    Return $aData2D
EndFunc   ;==>__IniVirtual_GetKeysVal

« Последнее редактирование: Август 19, 2018, 17:38:39 от Vanguger »

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2725
  • Репутация: 1140
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Не работает _IniVirtual_Read
« Ответ #2, Отправлен: Август 21, 2018, 02:35:42 »
Версия AutoIt3 должна быть 3.3.8.1

Онлайн Vanguger [?]

  • Новичок
  • *
  • Сообщений: 36

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Webarion
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Не работает _IniVirtual_Read
« Ответ #3, Отправлен: Август 21, 2018, 04:08:22 »
Понятно, спасибо! А я то самую свежую себе воткнул  :think:

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

Re: Не работает _IniVirtual_Read
« Ответ #3 Отправлен: Август 21, 2018, 04:08:22 »

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2725
  • Репутация: 1140
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Не работает _IniVirtual_Read
« Ответ #4, Отправлен: Август 22, 2018, 22:46:08 »
Vanguger
Можно поставить две версии. Вторую извлечь из моей сборки но как из архива, а не как инсталятор, чтобы не прописалась в реестр. Там же редактор Notepad++ с инструментами и видит свою среду, то есть по F5 выполнит скрипт и т.д. Будет как портабельная изолированная среда.

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

Re: Не работает _IniVirtual_Read
« Ответ #4 Отправлен: Август 22, 2018, 22:46:08 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
18 Ответов
6505 Просмотров
Последний ответ Апрель 24, 2010, 00:48:26
от AZJIO
0 Ответов
2665 Просмотров
Последний ответ Октябрь 09, 2012, 20:33:54
от BJ78
0 Ответов
2358 Просмотров
Последний ответ Январь 22, 2013, 12:01:37
от minimen456
3 Ответов
1564 Просмотров
Последний ответ Август 20, 2014, 15:40:38
от darow
3 Ответов
2040 Просмотров
Последний ответ Октябрь 11, 2014, 01:10:55
от null-nvrsk
1 Ответов
1500 Просмотров
Последний ответ Февраль 05, 2015, 01:22:04
от darow
5 Ответов
1715 Просмотров
Последний ответ Май 26, 2015, 23:09:42
от And
2 Ответов
1686 Просмотров
Последний ответ Июль 05, 2015, 20:05:25
от Imperial
4 Ответов
1428 Просмотров
Последний ответ Декабрь 03, 2015, 12:13:38
от ra4o
0 Ответов
1080 Просмотров
Последний ответ Март 08, 2016, 03:46:15
от Garrett