Что нового

[Массивы] Как создать пустой массив

ArgoNaft

Новичок
Сообщения
129
Репутация
0
У меня в коде есть чтение файла в массив, и в конце я склеиваю два массива и пишу их в файл.
Так вот если файл пустой у меня то массива не существует и он пишет, что я не декларировал массив. Я подумал может есть в autoit метод создания пустого массива как в php?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Код:
Local $a[1]

Но не факт что чтение возвратит опять пустую переменную не являющуюся массивом и будет та же ошибка.
После чтения надо проверять состояние @error.

CreatoR
Dim не должен использоваться в 99%. Можно и у нас открыть тему "практика плохого программирования", чтобы отписывать туда все ошибки.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
В бета версии пустой массив создается так:
Код:
Local $a[0]
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
Жаль что в обоих случаях создается индекс, просто определить его как массив без данных нельзя
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AZJIO [?]
Dim не должен использоваться в 99%
Это если в функции, в начале скрипта при объявлений переменных, это использовать можно.
Хотя я вообще не понимаю, для чего нужно было делать 3 метода объявления переменных :scratch:.

Кстати, мне кажется справка противоречит практике хорошего программирования:
Global может быть использовано для присвоения значений глобальным переменным внутри функций
Я бы вообще не рекомендовал использовать Global внутри функции. Локальные переменные следует объявлять в начале функции, а глобальным просто присваивать новые значения, без указания области видимости.

Можно и у нас открыть тему "практика плохого программирования"
Полезные рекомендации по написанию скриптов и составлению сообщении
Я всё жду заметки по улучшению в ЛС, но видимо это мало кому нужно.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
CreatoR
На счёт Dim, она двусмысленна, а в программирование всё односмысленно. Все упоминания Dim переписаны на Local. Ей можно пересоздать глобальный массив внутри функции, в остальных случаях пересоздать можно используя Local. Хотя при этом пересоздать можно и с помощью ReDim. Мы привыкли копировать что видим, поэтому справка переписывается в правильном стиле программирования.

Хотя я вообще не понимаю, для чего нужно было делать 3 метода объявления переменных
Да, я Local стал использовать и в глобальной области, всё равно они глобально создаются.

Кстати, мне кажется справка противоречит практике хорошего программирования:
Оригиналу соответствует, но просто позвляет Global внутри функции, хоть это и неправильно. Хотя тут можно поспорить... если функция вызывается 1 раз или ни разу за всё время запуска, то зачем скрипту заранее объявлять то, что использоваться не будет, но локально их тоже нельзя потому что функция вызывает из себя несколько функций и надо чтобы они увидели эти переменные. МОжно их передать но тогда надо подключать UDF для режима передачи параметров в режиме OnEvent. Вот и получается, то что неправильно бывает исключением из правил.

Я всё жду заметки по улучшению в ЛС, но видимо это мало кому нужно.
Зачем в ЛС? Удобнее обсуждать открыто и делать отчёт в первый пост. На офсайте же тема открытая и там много понаписали.


ArgoNaft [?]
Жаль что в обоих случаях создается индекс, просто определить его как массив без данных нельзя
Смотря какая структура массива. Если в первом элементе хранить число файлов, то 0 в первом элементе означает пустой массив. Аналогично если первый элемент не используется как чсило элементов то можно создать переменную-флаг отвечающую за пустоту массива. Оно остаётся при равных условиях, что переменная внутри массива, что снаружи, обслуживающая составляющая не увеличивается и не уменьшается. От вас требуется простое: проверить флаг ошибки и по ситуации установить флаг пустоты или пересоздать пустой массив с элементом 0... Ну в общем полёт фантазии и куча вариантов, что вас остановило не понимаю.
 
Верх