Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Ограничение IniReadSection() в 32 КБ

Ответить
Настройки темы
[решено] Ограничение IniReadSection() в 32 КБ

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204


Конфигурация

Профиль | Отправить PM | Цитировать


При работе с функцией IniReadSection() обнаружил, что из секции обрабатываются только первые 32 КБ текста. У меня одна из секций ini-файла содержит около 50 КБ. Таким образом, вместо ~1000 пар ключ-значение я получаю только 640.

Затем нашёл в справке: "Для Win9x совместимости возвращаются только первые 32767 символов раздела".
Нельзя ли это ограничение обойти кроме как написанием своего парсера ini-файлов?

Версия AutoIt - 3.3.6.1

Отправлено: 13:47, 15-04-2011

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Coutty:
Нельзя ли это ограничение обойти кроме как написанием своего парсера ini-файлов? »
Нет.

Но такие парсеры уже писались до нас, я в своё время этого не знал, и тоже писал свой:

Код: Выделить весь код
#include <Array.au3>

$aReadSect = _IniReadSectionEx("Test.ini", "Marvell", BitOR(1, 8, 16))
_ArrayDisplay($aReadSect)

;$iReadMode:
;            -1, Default -> Read only key=value entries (as default behaviour of IniReadSection)
;
;            The following options can be combined together with BitOR:
;                1 -> Do not read comments
;                8 -> Do not read keys without values
;                16 -> Strip comments in values. This parameter can be added with BitOR to other flags.
Func _IniReadSectionEx($sIniFile, $sSection, $iReadMode=-1)
    Local $aFileReadArr = StringSplit(StringStripCR(FileRead($sIniFile)), @LF)

    If @error Then
        Return SetError(1, 0, "")
    EndIf

    Local $aRetArr[$aFileReadArr[0]+1][2], $iUbound, $iSplitPos, $sKey, $sValue

    For $i = 1 To $aFileReadArr[0]
        If StringRegExp($aFileReadArr[$i], "^\s*\[\Q" & $sSection & "\E\][\s;]*.*") Then
            For $j = $i+1 To $aFileReadArr[0]
                If StringRegExp($aFileReadArr[$j], "^\s*\[[^\]]+\]\s*") Then
                    ExitLoop 2
                EndIf

                $iSplitPos = StringInStr($aFileReadArr[$j], "=")

                If $iSplitPos < 1 Then
                    $iSplitPos = StringLen($aFileReadArr[$j]) + 1
                EndIf

                $sKey = StringLeft($aFileReadArr[$j], $iSplitPos-1)
                $sValue = StringTrimLeft($aFileReadArr[$j], $iSplitPos)

                If $sKey = "" Then
                    ContinueLoop
                EndIf

                If $iSplitPos = 0 Then
                    $sValue = ""
                EndIf

                If $iReadMode <= 0 Or Not IsNumber($iReadMode) Then
                    If Not StringRegExp($aFileReadArr[$j], "\A[^;].*=.*$") Then
                        ContinueLoop
                    EndIf
                Else
                    If BitAND($iReadMode, 1) = 1 Then
                        If StringRegExp($aFileReadArr[$j], "\A(\s+|);") Then
                            ContinueLoop
                        EndIf
                    EndIf

                    If BitAND($iReadMode, 8) = 8 Then
                        If ($sValue = "" Or $sValue = $aFileReadArr[$j]) And Not StringRegExp($aFileReadArr[$j], "\A(\s+|);") Then
                            ContinueLoop
                        EndIf
                    EndIf

                    If BitAND($iReadMode, 16) = 16 Then
                        $sValue = StringRegExpReplace($sValue, ";.*?$", "")
                    EndIf
                EndIf

                $aRetArr[0][0] += 1

                $aRetArr[$aRetArr[0][0]][0] = $sKey
                $aRetArr[$aRetArr[0][0]][1] = $sValue
            Next

            ExitLoop
        EndIf
    Next

    ReDim $aRetArr[$aRetArr[0][0]+1][2]
    Return $aRetArr
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:42, 15-04-2011 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Creat0R, спасибо большое! То, что нужно)

Отправлено: 17:40, 15-04-2011 | #3


Старожил


Сообщения: 352
Благодарности: 44

Профиль | Отправить PM | Цитировать


Creat0R, Огромнейшее спасибо !

Отправлено: 12:46, 15-04-2014 | #4


Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


-TRM-,

IniVirtual (AZJIO)
IniEx (DXRW4E)
IniString (ResNullius & MrCreatoR (G.Sandler))

тема обсуждения на официальном сайте.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:07, 16-04-2014 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Ограничение IniReadSection() в 32 КБ

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - [решено] Ограничение доступа к Wi-fi Snake070 Сетевые технологии 10 01-08-2008 09:54
Траффик в IE - ограничение maximys_ Сетевые технологии 4 19-10-2005 16:01
Ограничение трафика Guest Сетевые технологии 2 03-10-2004 00:33
Ограничение доступа в IE Guest Хочу все знать 3 31-10-2003 17:35
Ограничение скорости Sulako Программирование и базы данных 1 15-02-2003 21:13




 
Переход