- Сообщения
- 5,379
- Репутация
- 2,724
Функция возвращает список функций (массив), которые находятся в заданном файле (.au3). По причине врожденной нелюбви к регулярным выражениям, функция _AU3LoadFuncList() написана с использованием стандартных String... функций.
Код:
#Include <Array.au3>
$List = _AU3LoadFuncList(RegRead('HKLM\SOFTWARE\AutoIt v3\AutoIt', 'InstallDir') & '\Include\WinAPI.au3')
_ArrayDisplay($List, '_AU3LoadFuncList')
Func _AU3LoadFuncList($sFile)
Local $hFile, $Line, $Str, $Comment = 0, $Count = 0, $Error = 0
Local $List[1] = [0]
Local $i, $j
$hFile = FileOpen($sFile, 0)
If $hFile = -1 Then
Return SetError(1, 0, $List)
EndIf
While 1
$Line = FileReadLine($hFile)
If @error Then
Switch @error
Case -1
Case Else
$Count = 0
$Error = 1
EndSwitch
ExitLoop
EndIf
$Line = StringStripWS(StringReplace($Line, @TAB, ' '), 1)
$i = StringInStr($Line, ' ')
If $i > 0 Then
$Str = StringLeft($Line, $i - 1)
Else
$Str = $Line
EndIf
Switch $Str
Case '#comments-start', '#cs'
$Comment += 1
Case '#comments-end', '#ce'
$Comment -= 1
Case 'func'
If $Comment <= 0 Then
$Line = StringTrimLeft($Line, 4)
If StringLeft($Line, 1) = ' ' Then
$Line = StringStripWS($Line, 1)
$i = StringInStr($Line, '(')
$j = StringInStr($Line, ' ')
If ($i > $j) And ($j > 0) Then
$i = $j
EndIf
If $i = 0 Then
ContinueLoop
EndIf
$Str = StringLeft($Line, $i - 1)
If $Str > '' Then
$Count += 1
ReDim $List[$Count + 1]
$List[$Count] = $Str
EndIf
EndIf
EndIf
EndSwitch
WEnd
FileClose($hFile)
$List[0] = $Count
ReDim $List[$Count + 1]
Return SetError($Error, 0, $List)
EndFunc ;==>_AU3LoadFuncList