Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Инициализация массива  (Прочитано 18687 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
sergvg
Интересующийся

ru
Offline Offline

« : 09-06-2010 12:32 » 

Прошу модераторов перенести тему в соответствующий раздел, если я выбрал его неправильно.

Итак, вопрос:
как в скрипте (с расширением .vbs) проинициализировать одномерный и двумерный массивы известными заранее значениями?

что-то типа:
одномерный (1,2,3,5,6)
двумерный ((1,2,3),(4,5,6))


Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 09-06-2010 12:48 » 

Dim Arr

Arr = Array(1, 2, 3, 4, 5, 6)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sergvg
Интересующийся

ru
Offline Offline

« Ответ #2 : 10-06-2010 06:33 » 

Спасибо. А почему двумерный не получается?

ApExcel.Range("B3:C5").Value = Array(Array(1,2),Array(3,4),Array(5,6))

Как двумерный сделать?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-06-2010 06:49 » 

sergvg, а попробовать так же как ты записал в вопросе?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sergvg
Интересующийся

ru
Offline Offline

« Ответ #4 : 10-06-2010 07:25 » 

хм. Дык ведь не работает так. Где я обкосячился?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 10-06-2010 08:02 » 

http://msdn.microsoft.com/ru-ru/library/kfky451c.aspx
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sergvg
Интересующийся

ru
Offline Offline

« Ответ #6 : 10-06-2010 08:26 » 

Беру пример
Код:
Dim sales()() As Double = New Double(11)() {}
Dim month As Integer
Dim days As Integer
For month = 0 To 11
    days = DateTime.DaysInMonth(Year(Now), month + 1)
    sales(month) = New Double(days - 1) {}
Next month

сохраняю его в expample.vbs
запускаю, получаю ошибку:

* error.gif (13.63 Кб - загружено 819 раз.)
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #7 : 10-06-2010 08:32 » 

sergvg, ты уж реши, для себя, что ты пишешь - скрипт для WSH на VBScript или программу на VB.NET.
Вот так работает в скрипте:
Код: (Text)
Arr = Array(Array(1, 2, 3), Array(4, 5, 6))
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
sergvg
Интересующийся

ru
Offline Offline

« Ответ #8 : 10-06-2010 08:53 » 

Цитирую первый мой пост:


Цитата
Итак, вопрос:
как в скрипте (с расширением .vbs) проинициализировать одномерный и двумерный массивы известными заранее значениями?

С учётом всего вышесказанного делаю:

Код:
Set ApExcel = CreateObject("Excel.application") 'Creates an object
ApExcel.Visible = True ' So you can see Excel
ApExcel.Workbooks.Add 'Adds a new book.
Dim Arr
Arr = Array(Array(1, 2, 3), Array(4, 5, 6))
ApExcel.Range("B3:d4").Value = Arr

В итоге, запускается эксель, создаётся книга, в ней в диапазоне B3:C4 - пусто, а в диапазоне D3:D4 - "#Н/Д".

Но если определить массив двумерный так:

Код:
Dim Arr(2,2)
Arr(0,0)=1
Arr(0,1)=2
Arr(1,0)=3
Arr(1,1)=4

то тогда всё работает. Но у меня нет желания указывать номера индексов для всех элементов массива. Поэтому, повторяю вопрос из первого поста:

Как проинициализировать ДВУМЕРНЫЙ МАССИВ известными заранее значениями?
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #9 : 10-06-2010 09:00 » new

Код: (Text)
Arr = Array(Array(1, 2, 3), Array(4, 5, 6))
V=Arr(1)(2) ' Здесь V=6
Массив создается и инициализируется. Перефразируй вопрос для Excel - что он там принимает для Range?
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
sergvg
Интересующийся

ru
Offline Offline

« Ответ #10 : 10-06-2010 09:13 » 

а надо, чтобы не Arr(1)(2) было 6, а Arr(1,2).  Я так понял, тут существуют понятия как многомерный массив, так и вложенные массивы. В случае с Excel нужен двумерный массив. Пример, как работает - я приводил, но там каждый элемент надо присваивать с указанием всех индексов. То есть, Arr(0,0) = 1, Arr(0,1) = 2, Arr(1,0) = 3 и т.д.

Из Перла в эксель передаётся как массив массивов, но в перле нет многомерных массивов.
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #11 : 10-06-2010 10:17 » 

sergvg, Да, действительно, не получается.. Если нужно быстрое решение - могу посоветовать только заполнять построчно Жаль
Код: (Text)
St1="1,2,3"
St2="4,5,6"
Set ApExcel = CreateObject("Excel.application") 'Creates an object
ApExcel.Visible = True ' So you can see Excel
ApExcel.Workbooks.Add 'Adds a new book.
ApExcel.Range("B3:D3").Value2 = Split(St1, ",")
ApExcel.Range("B4:D4").Value2 = Split(St2, ",")
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
sergvg
Интересующийся

ru
Offline Offline

« Ответ #12 : 10-06-2010 10:38 » 

построчно можно и так:
ApExcel.Range("B3:E3").Value = Array(1,2,3,4)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines