Что нового

_Array_Dump сохраняет структуру массива

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
462
AutoIt: 3.3.10.0+
Версия: 1.1

Категория: Массивы

Описание: Содержит функцию _Array_Dump которая позволяет просмотреть и востановить структуру и содержание любого массива. Результат представляет собой функцию, которая содержит код востановления исходного массива в первоначальный вид. Результат можно сохранить в файл или вывести в консоль. Нет ограничений на размерность массива*. Нет ограничение на вложенность массивов друг в друга - сохраняет структуру вложенности*

Поддерживает все основные типы данных: Int32, Int64, Double, String, Bool, UserFunction, Function, Ptr/HWnd, Binary, Keyword, Array, Null
Не поддерживается: DLLStruct, Object

Пример:
Код:
Local $test_6[5] = [True, 123, 'string', Binary('0xDD'),WinGetHandle('')]
ConsoleWrite(_Array_Dump($test_6,'test') & @LF)

Выводит в консоль:
Код:
Func dump_test()
    Local $test[5]
    $test[0] = True            ; Bool
    $test[1] = 123             ; Int32
    $test[2] = 'string'        ; String(6)
    $test[3] = Binary('0xDD')  ; Binary(1)
    $test[4] = HWnd('0x00140B0C')	    ; Ptr

    Return $test
EndFunc
Global $test = dump_test()
Еще примеры:
Простой массив:
Код:
#include '_Array_Dump.au3'
Local $array[3] = ['string',123,True]
ConsoleWrite(_Array_Dump($array,'test') & @LF)


Выводит в консоль:
Код:
Func dump_test()
    Local $test[3]
    $test[0] = 'string'
    $test[1] = 123
    $test[2] = True

    Return $test
EndFunc
Global $test = dump_test()
Двумерный массив:
Код:
Local $array[3][2] = [['string',555],[123,'Первая строка' & @CRLF & 'Вторая строка'],[True]]
ConsoleWrite(_Array_Dump($array,'test') & @LF)


Выводит в консоль:
Код:
Func dump_test()
    Local $test[3][2]
    $test[0][0] = 'string'
    $test[0][1] = 555
    $test[1][0] = 123
    $test[1][1] = 'Первая строка' & @CRLF & 'Вторая строка'
    $test[2][0] = True
    $test[2][1] = ''

    Return $test
EndFunc
Global $test = dump_test()
Вложенные массивы:
Код:
Local $array_one[3] = ['string',123,True]
Local $array[3][2] = [[$array_one],[1,2],[3,4]]
ConsoleWrite(_Array_Dump($array,'test') & @LF)


Выводит в консоль:

Код:
Func dump_test()
    Local $test_00[3]
    $test_00[0] = 'string'
    $test_00[1] = 123
    $test_00[2] = True

    Local $test[3][2]
    $test[0][0] = $test_00
    $test[0][1] = ''
    $test[1][0] = 1
    $test[1][1] = 2
    $test[2][0] = 3
    $test[2][1] = 4

    Return $test
EndFunc
Global $test = dump_test()
Что то очень сложное:
Код:
Local $test_1[3] = [True, 123, 'string']
Local $test_2[3] = ['a' & @CRLF, "cat's", "c's " & @CR & "new''s"]
Local $test_3[3] = [@CRLF & 'a' & @CRLF, @CRLF & @CRLF & @CRLF, "c's " & @CR & "new''s"]
Local $test_4[3] = ['a', 'b', StringSplit(123, '', 2)]
Local $test_5[4] = ['a', 'b', StringSplit(123, '', 2), StringSplit(456, '', 2)]
Local $test_6[3] = [True, 123, 'string']
Local $test_7[4] = ['a', 'b', StringSplit(123, '', 2), StringSplit(456, '', 2)]
Local $test_8[4] = ['a', $test_6, StringSplit(345, '', 2), $test_7]
Local $test_2d[3][2] = [['a', 1],['b', 2],['c', 3]]
Local $test_3d[3][2][2] = [[['a', 10],['a', 11]],[['b', 20],['b', 21]],[['c', 30],['c', 31]]]


Local $test_combo[3][2][2] = [[[$test_1, $test_2],['a', $test_4]],[[$test_3, $test_8],['b', $test_2d]],[['c', $test_7],[$test_5, $test_3d]]]
ConsoleWrite(_Array_Dump($test_combo,'combo') & @LF)


Выводит в консоль:
Код:
Func dump_combo()
    Local $combo_00[3]
    $combo_00[0] = True
    $combo_00[1] = 123
    $combo_00[2] = 'string'

    Local $combo_01[3]
    $combo_01[0] = 'a' & @CRLF
    $combo_01[1] = 'cat''s'
    $combo_01[2] = 'c''s ' & @CR & 'new''''s'

    Local $combo_02_03[3]
    $combo_02_03[0] = '1'
    $combo_02_03[1] = '2'
    $combo_02_03[2] = '3'

    Local $combo_02[3]
    $combo_02[0] = 'a'
    $combo_02[1] = 'b'
    $combo_02[2] = $combo_02_03

    Local $combo_04[3]
    $combo_04[0] = @CRLF & 'a' & @CRLF
    $combo_04[1] = @CRLF & @CRLF & @CRLF
    $combo_04[2] = 'c''s ' & @CR & 'new''''s'

    Local $combo_05_06[3]
    $combo_05_06[0] = True
    $combo_05_06[1] = 123
    $combo_05_06[2] = 'string'

    Local $combo_05_07[3]
    $combo_05_07[0] = '3'
    $combo_05_07[1] = '4'
    $combo_05_07[2] = '5'

    Local $combo_05_08_09[3]
    $combo_05_08_09[0] = '1'
    $combo_05_08_09[1] = '2'
    $combo_05_08_09[2] = '3'

    Local $combo_05_08_10[3]
    $combo_05_08_10[0] = '4'
    $combo_05_08_10[1] = '5'
    $combo_05_08_10[2] = '6'

    Local $combo_05_08[4]
    $combo_05_08[0] = 'a'
    $combo_05_08[1] = 'b'
    $combo_05_08[2] = $combo_05_08_09
    $combo_05_08[3] = $combo_05_08_10

    Local $combo_05[4]
    $combo_05[0] = 'a'
    $combo_05[1] = $combo_05_06
    $combo_05[2] = $combo_05_07
    $combo_05[3] = $combo_05_08

    Local $combo_11[3][2]
    $combo_11[0][0] = 'a'
    $combo_11[0][1] = 1
    $combo_11[1][0] = 'b'
    $combo_11[1][1] = 2
    $combo_11[2][0] = 'c'
    $combo_11[2][1] = 3

    Local $combo_12_13[3]
    $combo_12_13[0] = '1'
    $combo_12_13[1] = '2'
    $combo_12_13[2] = '3'

    Local $combo_12_14[3]
    $combo_12_14[0] = '4'
    $combo_12_14[1] = '5'
    $combo_12_14[2] = '6'

    Local $combo_12[4]
    $combo_12[0] = 'a'
    $combo_12[1] = 'b'
    $combo_12[2] = $combo_12_13
    $combo_12[3] = $combo_12_14

    Local $combo_15_16[3]
    $combo_15_16[0] = '1'
    $combo_15_16[1] = '2'
    $combo_15_16[2] = '3'

    Local $combo_15_17[3]
    $combo_15_17[0] = '4'
    $combo_15_17[1] = '5'
    $combo_15_17[2] = '6'

    Local $combo_15[4]
    $combo_15[0] = 'a'
    $combo_15[1] = 'b'
    $combo_15[2] = $combo_15_16
    $combo_15[3] = $combo_15_17

    Local $combo_18[3][2][2]
    $combo_18[0][0][0] = 'a'
    $combo_18[0][0][1] = 10
    $combo_18[0][1][0] = 'a'
    $combo_18[0][1][1] = 11
    $combo_18[1][0][0] = 'b'
    $combo_18[1][0][1] = 20
    $combo_18[1][1][0] = 'b'
    $combo_18[1][1][1] = 21
    $combo_18[2][0][0] = 'c'
    $combo_18[2][0][1] = 30
    $combo_18[2][1][0] = 'c'
    $combo_18[2][1][1] = 31

    Local $combo[3][2][2]
    $combo[0][0][0] = $combo_00
    $combo[0][0][1] = $combo_01
    $combo[0][1][0] = 'a'
    $combo[0][1][1] = $combo_02
    $combo[1][0][0] = $combo_04
    $combo[1][0][1] = $combo_05
    $combo[1][1][0] = 'b'
    $combo[1][1][1] = $combo_11
    $combo[2][0][0] = 'c'
    $combo[2][0][1] = $combo_12
    $combo[2][1][0] = $combo_15
    $combo[2][1][1] = $combo_18

    Return $combo
EndFunc
Global $combo = dump_combo()
Файл: Версия: 1.1

История версий:
Версия 1.0 AutoIt: 3.3.2.0+
Первая версия
Файл: Версия: 1.0

Версия 1.1 AutoIt: 3.3.10.0+
+ Добавлен вывод комментариев для каждого типа переменной
+ В комментариях к строкам, двоичным данным и массивам - добавлено в скобках размер
+ В комментариях к DLLStruct добавлен указатель(ptr) и размер(size)
+ В комментариях к Object добавлены свойства объекта из функции ObjName
+ Добавлена поддержка следующих типов: Binary, UserFunction, Function, Ptr, HWnd, ключевого слова NULL
Файл: Версия: 1.1

Источник: autoit-script.ru
Автор(ы): inververs

Примечание: Спасибо C2H5OH за помощь в создании функции.
* Ограничено только возможностями AutoIT. На данный момент максимально можно создать 64-мерный массив.
* Ограничено максимальным уровнем рекурсии. 3900 лимит для x64 и 1900 лимит для x86


UPD: Новая версия: 1.1
 

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
332
inververs
просто дамп - это не очень интересно. Интересно, наверное, было бы сделать для многомерных массивов _FileWriteFromArrayEx и, соответственно, _FileReadToArrayEx.
;D
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
462
C2H5OH [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php/topic,16369.msg100981.html#msg100981')][?][/url_ex]
Интересно, наверное, было бы сделать для многомерных массивов _FileWriteFromArrayEx и, соответственно, _FileReadToArrayEx.
:smile: Все в ваших руках.

Эта функция пригодится для отладки скриптов, когда массив заполняется в резуальтате какой то работы, и что бы эту всю работу не повторять каждый раз, можно сдампить массив, что бы затем быстро востановить его содержимое.

Ну еще можно смотреть содержимое массивов любой размерности и любой вложенности.

Решил сделать т.к нет инструментов для просмотра кроме как _array_display, который ограничивается 2мерными массивами.

Буду надеяться что кому нибудь эта библиотека поможет.
 
Верх