- Сообщения
- 3,999
- Репутация
- 967
Работая с массивами, я (думаю и не только я) пользуюсь функцией из UDF Array.au3 _ArrayDisplay. Она в удобной форме выводит содержимое массива, что порой бывает полезно.
Давно заметил, если мы имеем дело с добавлением в ячейку, массива или объекта (вложенность), то ячейка, содержащая в себе массив или объект, никак не отображается в списке, который выводит _ArrayDisplay. Это IMHO не очень удобно в плане визуального представления. До определенного момента я мирился с этим, но как-то раз решил поправить ситуацию, и дописал в Array.au3 (стандартная поставка) пару строк, которые позволили мне видеть содержимое ячеек.
Привожу на ваш суд участок кода функции _ArrayDisplay, который дополнит её вышеописанным свойством.
Пример:
Исходный код:
Код для замены:
Внимание! Если вы решите модернизировать свою UDF выше описанным методом, не забудьте сделать резервную копию.
P.S. Если это окажется действительно полезным и удобным не только для меня, то наверно можно будет написать авторам UDF, чтобы они внесли изменения.
Давно заметил, если мы имеем дело с добавлением в ячейку, массива или объекта (вложенность), то ячейка, содержащая в себе массив или объект, никак не отображается в списке, который выводит _ArrayDisplay. Это IMHO не очень удобно в плане визуального представления. До определенного момента я мирился с этим, но как-то раз решил поправить ситуацию, и дописал в Array.au3 (стандартная поставка) пару строк, которые позволили мне видеть содержимое ячеек.
Привожу на ваш суд участок кода функции _ArrayDisplay, который дополнит её вышеописанным свойством.
Пример:
Код:
#include <IE.au3>
#include <Array.au3>
Dim $a[10] = [2,8,3,7,4,1,6,45,22,99]
Dim $b[1][2] = [["This!", 2]]
$a[2] = $b
$oIE = _IECreate('http://ya.ru')
$a[3] = $oIE
_ArrayDisplay($a, "Value of the array: $a")
_ArrayDisplay($a[2], "Value of the cell array $a[2]")
MsgBox(0, "Value of the cell array $a[3] "& ObjName($a[3]), "Locationurl: " & _IEPropertyGet($a[3], "locationurl"))
Исходный код:
Код:
; Convert array into text for listview
Local $avArrayText[$iUBound + 1]
For $i = 0 To $iUBound
$avArrayText[$i] = "[" & $i & "]"
For $j = 0 To $iSubMax
; Get current item
If $iDimension = 1 Then
If $iTranspose Then
$vTmp = $avArray[$j]
Else
$vTmp = $avArray[$i]
EndIf
Else
If $iTranspose Then
$vTmp = $avArray[$j][$i]
Else
$vTmp = $avArray[$i][$j]
EndIf
EndIf
; Add to text array
$vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
$avArrayText[$i] &= $sSeparator & $vTmp
; Set max buffer size
$vTmp = StringLen($vTmp)
If $vTmp > $iBuffer Then $iBuffer = $vTmp
Next
Next
Код для замены:
Код:
; Convert array into text for listview
Local $avArrayText[$iUBound + 1]
For $i = 0 To $iUBound
$avArrayText[$i] = "[" & $i & "]"
For $j = 0 To $iSubMax
; Get current item
; Visibility of an array or object in the list
; Editing: Garrett
If $iDimension = 1 Then
If $iTranspose Then
$vTmp = $avArray[$j]
If IsArray($vTmp) Then $vTmp = '#Array('& UBound($vTmp, 0) &')'
If IsObj($vTmp) Then $vTmp = '#Object('& ObjName($vTmp) &')'
Else
$vTmp = $avArray[$i]
If IsArray($vTmp) Then $vTmp = '#Array('& UBound($vTmp, 0) &')'
If IsObj($vTmp) Then $vTmp = '#Object('& ObjName($vTmp) &')'
EndIf
Else
If $iTranspose Then
$vTmp = $avArray[$j][$i]
If IsArray($vTmp) Then $vTmp = '#Array('& UBound($vTmp, 0) &')'
If IsObj($vTmp) Then $vTmp = '#Object('& ObjName($vTmp) &')'
Else
$vTmp = $avArray[$i][$j]
If IsArray($vTmp) Then $vTmp = '#Array('& UBound($vTmp, 0) &')'
If IsObj($vTmp) Then $vTmp = '#Object('& ObjName($vTmp) &')'
EndIf
EndIf
; Add to text array
$vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
$avArrayText[$i] &= $sSeparator & $vTmp
; Set max buffer size
$vTmp = StringLen($vTmp)
If $vTmp > $iBuffer Then $iBuffer = $vTmp
Next
Next
Внимание! Если вы решите модернизировать свою UDF выше описанным методом, не забудьте сделать резервную копию.
P.S. Если это окажется действительно полезным и удобным не только для меня, то наверно можно будет написать авторам UDF, чтобы они внесли изменения.