Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26

Создание массива из элементов массива

28.03.2016, 18:53. Показов 2057. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, столкнулся с небольшой проблемой. Если кто-нибудь осведомлен - помогите, пожалуйста)
Есть таблица значений, выведенная из текстового файла, теперь требуется озаглавить каждый столбец этой таблицы, названия столбцов находятся в двумерном массиве "b", в строках с 3ей по 26ю, одинаковым порядковым номером элемента - вторым.
Каким образом мне задать массив "c", чтобы поместить туда вторые элементы указанных строк массива "b". То, как я делаю это сейчас - заканчивается ошибкой "type mismatch"
Код прилагаю, заранее спасибо, с уважением.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Main_cfg()
Dim b()
Dim c()
    Dim i
    Dim cfg_name, txt1
    Dim rw1, cl1
'------------------------
    cfg_name = Application.GetOpenFilename("COMTRADE Files (*.cfg), *.cfg")
    txt1 = CreateObject("scripting.filesystemobject").OpenTextFile(cfg_name, 1, True).ReadAll
    rw1 = Split(txt1, vbNewLine)
    cl1 = Split(rw1(2), ",")
    ReDim b(1 To UBound(rw1), 1 To UBound(cl1) + 1)
    For i = 2 To UBound(rw1)
        cl1 = Split(rw1(i), ",")
        For j = 0 To UBound(cl1)
            b(i + 1, j + 1) = cl1(j)
        Next
    Next
    For i = 2 To 26
    ReDim c(b, i)
    Next
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.03.2016, 18:53
Ответы с готовыми решениями:

Создание массива и поиск равных среднему арифметическому элементов массива
Создать массив (пусть это будет целочисленный массив), состоящий из 100 элементов. Считать количество используемых элементов в программе в...

Преобразование массива, создание массива из элементов строк матрицы.
Помогите пожалуйста!! Нужно написать проги на Паскале. Буду Вам очень благодарен!!! Первая по Массивам. Даны действительные а1, ...,...

Создание нового массива из определенных элементов другого массива
Здравствуйте. Мне нужно создать одномерный массив из элементов двумерного массива. Как можно это сделать? Как объявить массив, чтоб он не...

14
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
29.03.2016, 09:13
For i = 2 To UBound(rw1) цикл до конца массива
b(i + 1, j + 1) - индексы выходят за пределы массива
Ну это так. Бегло.
А вообще-то бейсик сам показывает строку с ошибкой. В какой строке?
1
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26
29.03.2016, 17:55  [ТС]
Спасибо, попробую)
Нажимая F8 дотыкал до прохождения одного раза цикла
Visual Basic
1
2
3
For i = 2 To 26
    ReDim c(b, i)
    Next
уже в самом конце
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
29.03.2016, 18:29
Visual Basic
1
2
3
For i = 2 To 26
ReDim c(b, i)
Next
Можете объяснить сокральную тайну сего действия?
А то я до сих пор делаю не правильно:

Visual Basic
1
ReDim c(b, 26)
Добавлено через 2 минуты
И, собственно откуда выплыло 26?
Вы из Баку? И это память о 26 бакинских комиссарах?

Добавлено через 1 минуту
Привязываться надо к размеру массива, полученного Split

Добавлено через 29 секунд
По крайней мере проверять размер

Добавлено через 2 минуты
F8 дотыкал
А просто запустить на исполнение и при ошибке посмотреть на что ругается бейсик?
1
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26
29.03.2016, 18:43  [ТС]
Забыл написать, что совершенно недавно, по роду деятельности, пришлось познакомится с VBA, вот и синтаксис всё никак не отложится в моей голове, спасибо за помощь)
Касаемо привязки - вы всё правильно поняли, 26 - это конечная строка массива b, из которой требуется достать элемент для массива c. Лишь хотелось создать одномерный массив, в котором идут подряд элементы, имеющие порядковый номер 2, взятые со 3 по 26 строку массива b
Гуглил упорно аналогичную ситуацию на форумах, безуспешно, я уверен, что это довольно просто, но пока что, как говорится, не шарю)
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
29.03.2016, 22:21
Лучший ответ Сообщение было отмечено Lebni4 как решение

Решение

имеющие порядковый номер 2, взятые со 3 по 26 строку массива b
Ну тогда вам не нужен внутренний цикл
Файла нет так что без проверки как-то так
Visual Basic
1
2
3
4
5
6
7
    rw1 = Split(txt1, vbNewLine)
    For i = 2 To UBound(rw1)
        cl1 = Split(rw1(i), ",")
        j = j & " " & cl1(1)
        If i >= 25 Then Exit For 'если массив больше 26 строк
    Next
    cl1 = Split(Trim(j)) ' тут одномерный массив
1
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26
30.03.2016, 13:59  [ТС]
Спасибо большое! Все сработало
0
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26
30.03.2016, 15:15  [ТС]
Единственное что, нашел загвоздку в том, что некоторые значения в файле имеют пробел, в результате чего некорректно заполняется массив.
Извините, что снова обращаюсь, но что требуется изменить в коде, чтобы программа не рассматривала пробел как переход к следующему значению.
Изображение как быть должно и файл прилагаю (поменял формат на txt, чтобы загрузился сюда)
Миниатюры
Создание массива из элементов массива  
Вложения
Тип файла: txt Norma_02_osc - копия.txt (818 байт, 4 просмотров)
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
31.03.2016, 12:12
Заменить на другой разделитель, который заведомо не встретится в файле
Не проверял, но как-то так
Visual Basic
1
2
3
4
5
6
7
    rw1 = Split(txt1, vbNewLine)
    For i = 2 To UBound(rw1)
        cl1 = Split(rw1(i), ",")
        j = IIf(Len(j) = 0, cl1(1), j & "|" & cl1(1))
        If i >= 25 Then Exit For 'если массив больше 26 строк
    Next
    cl1 = Split(j, "|") ' тут одномерный массив
0
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26
31.03.2016, 22:34  [ТС]
Alex77755, благодарю вас за помощь!)

Добавлено через 13 минут
И последнее, если вдруг мне надо будет еще на один элемент увеличить количество данных в массиве cl1, что мне требуется поменять в этой строке
Visual Basic
1
j = IIf(Len(j) = 0, cl1(1), j & "|" & cl1(1))
потому что при замене числа 25 на 26 именно в ней выдает ошибку.
С уважением.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
31.03.2016, 23:39
А есть ли в той строке запятая?
Ведь берётся 2 элемент
на всякий случай поставить проверку
Visual Basic
1
2
3
4
5
6
7
8
9
    For i = 2 To UBound(rw1)
        If InStr(1, rw1(i), ",") > 0 Then
            cl1 = Split(rw1(i), ",")
            j = IIf(Len(j) = 0, cl1(1), j & "|" & cl1(1))
            If i >= 25 Then Exit For 'если массив больше 26 строк
        Else
            MsgBox rw1(i), vbCritical, "Нет запятой"
        End If
    Next
1
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26
31.03.2016, 23:45  [ТС]
Да, действительно, благодарю в очередной раз!
0
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26
04.04.2016, 22:07  [ТС]
Доброго вечера, если кто-то смотрит эту тему!
В продолжении построения программы столкнулся с проблемой вывода массива на лист, обрезается один элемент. Скрин с массивом и итогом его выведения прилагаю.
код вывода одномерного массива:
Visual Basic
1
LC1.Cells(3, 3).Resize(1, UBound(cl1, 1)) = cl1
С уважением, заранее спасибо.
Миниатюры
Создание массива из элементов массива   Создание массива из элементов массива  
Вложения
Тип файла: rar массив.rar (13.2 Кб, 1 просмотров)
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
04.04.2016, 22:31
А так?
Visual Basic
1
LC1.Cells(3, 3).Resize(1, UBound(cl1)+1) = cl1
Миниатюры
Создание массива из элементов массива  
1
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 26
04.04.2016, 22:38  [ТС]
Благодарю, получилось!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2016, 22:38
Помогаю со студенческими работами здесь

Создание одного массива из элементов другого массива
Здравствуйте, имеется следующая проблема: Стоит задача поиска последовательности байтов в файле формата sig, я организовал цикл...

Создание массива из элементов другого массива по условию
Здравствуйте! Обучаюсь Java, на одном сайте получил такую задачу "Дан массив чисел. Создать массив из четных чисел этого массива. Если...

Создание массива В из простых элементов массива А
Создайте массив В из простых элементов массива А.

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

Определить количество положительных элементов массива. Элементы массива задаются датчиком случайных чисел (размерность массива произвольна)
Определить количество положительных элементов массива. Элементы массива задаются датчиком случайных чисел (размерность массива произвольна)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru