Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:29

Работа с массивами. Массив из массива.

Автор riff666, 06 мая 2020, 18:36

0 Пользователей и 1 гость просматривают эту тему.

riff666

Всем добра. Возникла необходимость создать массив. Сроки в котором формируются на основе другого массива. Сначала заполняю строку, затем добавляю. Этот массив в качестве элемента другого массива.
Далее очищаю массив для строки. Второй массив куда был добавлен первый обнуляется. По итогу массив строк. где каждая строка массив но пустой.
Вот код:

        Стр=1;
Кол=1;
Строка = Новый Массив;
Табл = Новый Массив;
Пока Стр <= ФайлСтрок Цикл
Пока Кол<= ФайлКолонок Цикл
Строка.Добавить(Excel.Cells(Стр, Кол).Text);
Кол=Кол+1;
КонецЦикла;
Стр = Стр+1;
Кол=1;
Табл.Добавить(Строка);
Строка.Очистить();
КОнецЦикла;

По моей логике значения из первого массива должны заносится во второй и если я продолжаю работать с первым массивам то значения которые во втором массиве не должны страдать или я не прав?

antoneus

Переменная Строка в данном случае указывает везде на один и тот же массив. Правильно так:

Пока Стр <= ФайлСтрок Цикл
    Строка = Новый Массив;


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

ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Область = Лист.Range(Лист.Cells(1,1), Лист.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();

Dethmontt

Цитата: riff666 от 06 мая 2020, 18:36работать с первым массивам то значения которые во втором массиве не должны страдать или я не прав?
Ты добавляешь во второй массив указатель на первый массив, естественно если очистить первый массив то указатель будет показывать на уже очищенный массив
Добавлено: 08 мая 2020, 04:00


Цитата: antoneus от 06 мая 2020, 21:36Пока Стр <= ФайлСтрок Цикл
    Строка = Новый Массив;
не представляю чем тебе это поможет...

Но если ты хочешь копировать Значения массива в другой массив, то так и делай.
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

antoneus

Цитата: antoneus от 06 мая 2020, 21:36Пока Стр <= ФайлСтрок Цикл
    Строка = Новый Массив;
не представляю чем тебе это поможет...

Тем, что будет достигнута цель - в результате получится массив (это строки), в котором элементами будут массивы - значения ячеек строк. Естественно, Строка.Очистить() надо убрать.

Dethmontt

Цитата: antoneus от 08 мая 2020, 11:25Тем, что будет достигнута цель
не будет, можешь сам попробовать...
Добавлено: 17 мая 2020, 05:21


ты пересоздаешь переменную "Строка"
Цитата: antoneus от 06 мая 2020, 21:36Строка = Новый Массив;
Которую на предыдущем этапе положил в массив
Цитата: riff666 от 06 мая 2020, 18:36Табл.Добавить(Строка);
А ведь ты положил указатель...

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

antoneus

Попробовал, что я делаю не так?
Добавлено: 17 мая 2020, 13:07


Переменная Строка теперь указывает на другой объект, но на изначальный объект в памяти теперь ссылается Табл[Индекс] и он никуда не девается. В питоне, например, точно так же.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск