в очень известной, функции _IniReadSectionEx
не предусмотрен один момент, что хоть сам файл и большой, в нём может быть множество заремленных строк в результате получается ошибка в строке ReDim $aReplace[($iMax + 1) + $aTemp[0][0]][2] , в которой говорится, что $aReplace не массив, для решения данной проблемы необходимо перед вышеуказанной строкой добавить
может кому-то пригодится, а может кто-то и предложит более оптимальное решение
Код:
Func _IniReadSectionEx($hFile, $vSection)
Local $iSize = FileGetSize($hFile) / 1024
If $iSize <= 31 Then Return IniReadSection($hFile, $vSection)
Local $sFRead = FileRead($hFile), $sHold, $xCC, $iNum = 1
Local $aSplit = StringSplit(StringStripCR($sFRead), @LF)
For $xCC = 1 To $aSplit[0]
If StringLeft(StringStripWS($aSplit[$xCC], 7), _
StringLen(StringStripWS('[' & $vSection & ']', 7))) = StringStripWS('[' & $vSection & ']', 7) Then
For $kCC = $xCC + 1 To $aSplit[0]
If StringLeft(StringStripWS($aSplit[$kCC], 8), 1) = '[' Then ExitLoop
$sHold &= $aSplit[$kCC] & Chr(01)
Next
ExitLoop
EndIf
Next
If $sHold = '' Then Return SetError(1, 0, 0)
$sHold = StringSplit(StringTrimRight($sHold, 1), Chr(01))
FileWriteLine(@TempDir & '\IniReadSectionTemp' & $iNum & '.ini', '[' & $vSection & ']')
For $iCC = 1 To $sHold[0]
If FileGetSize(@TempDir & '\IniReadSectionTemp' & $iNum & '.ini') / 1024 > 25 Then
$iNum += 1
FileWriteLine(@TempDir & '\IniReadSectionTemp' & $iNum & '.ini', '[' & $vSection & ']')
EndIf
FileWriteLine(@TempDir & '\IniReadSectionTemp' & $iNum & '.ini', $sHold[$iCC])
Next
Local $aTemp, $aReplace, $iMax
For $aCC = 1 To $iNum
$aTemp = IniReadSection(@TempDir & '\IniReadSectionTemp' & $aCC & '.ini', $vSection)
If $aCC = 1 Then
$aReplace = $aTemp
FileDelete(@TempDir & '\IniReadSectionTemp' & $aCC & '.ini')
Else ; Array 2 Dimensional Add On
$iMax = UBound($aReplace, 1) - 1
ReDim $aReplace[($iMax + 1) + $aTemp[0][0]][2]
For $bCC = 1 To $aTemp[0][0]
$aReplace[$bCC + $iMax][0] = $aTemp[$bCC][0]
$aReplace[$bCC + $iMax][1] = $aTemp[$bCC][1]
Next
FileDelete(@TempDir & '\IniReadSectionTemp' & $aCC & '.ini')
EndIf
Next
If IsArray($aReplace)=0 Then Return IniReadSection($hFile, $vSection)
$aReplace[0][0] = UBound($aReplace, 1) - 1
Return $aReplace
EndFunc
не предусмотрен один момент, что хоть сам файл и большой, в нём может быть множество заремленных строк в результате получается ошибка в строке ReDim $aReplace[($iMax + 1) + $aTemp[0][0]][2] , в которой говорится, что $aReplace не массив, для решения данной проблемы необходимо перед вышеуказанной строкой добавить
Код:
If IsArray($aReplace)=0 Then
FileDelete(@TempDir & '\IniReadSectionTemp' & $aCC & '.ini')
Return IniReadSection($hFile, $vSection)
EndIf
может кому-то пригодится, а может кто-то и предложит более оптимальное решение