VBScript, Имя массива из переменной

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
serg28serg
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 24.06.2008 (Вт) 11:28
Откуда: Санкт-Петербург

VBScript, Имя массива из переменной

Сообщение serg28serg » 24.06.2008 (Вт) 18:18

Скрипт в HTA файле

Создаю несколько одинаковых массивов
Код: Выделить всё
           ATmega16   =     Array ("1FF1", "1FF3", "1FF5", "1FFF")
           ATmega32   =     Array ("2FF1", "2FF3", "2FF5", "2FFF")
           ATmega64   =     Array ("3FF1", "3FF3", "3FF5", "3FFF")
           ATmega640  =     Array ("4FF1", "4FF3", "4FF5", "4FFF")

в зависимости от хода алгоритма надо брать данные из разных массивов, соответственно загоняю в переменную имя массива
например
Код: Выделить всё
strDevice = "ATmega32"

Теперь надо вытащить данные (под I-тым номером) из массива , имя которого сохранено в переменной
Как это сделать на VBScript ?

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 24.06.2008 (Вт) 20:10

А чем не устраивают двумерные массивы? Вместо четырёх одномерных можно создать один двумерный и обращаться к определённым элементам по индексам.
Salus populi suprema lex

serg28serg
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 24.06.2008 (Вт) 11:28
Откуда: Санкт-Петербург

Сообщение serg28serg » 24.06.2008 (Вт) 20:53

Так просто имена массивов я выбирал уже из существующих значений переменных, т.е. те которые все равно нужно иметь в командной строке для запуска экзешника для которого все это делалось.
так есть что нить такое в VBScript ??? , получается что то типа адресацией через указатели

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 25.06.2008 (Ср) 11:25

Ммм... А Scripting.Dictionary не пойдёт ? Он как коллекция работает. В элемент коллекции можно массив положить.

Код: Выделить всё

Dim Dictionary
Set Dictionary = CreateObject("Scripting.Dictionary")
Dictionary("Array1") = Array("1","2","3")
Dictionary("Array2") = Array("а","б","в")
Dictionary("Array3") = Array("a","b","c")

ArrayName = "Array2"

For Each Element in Dictionary(ArrayName)
   MsgBox Element
Next

serg28serg
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 24.06.2008 (Вт) 11:28
Откуда: Санкт-Петербург

Сообщение serg28serg » 25.06.2008 (Ср) 19:20

ALX_2002
Спасибо за помощь.

И еще пара вопросов

1. Возможно ли из VBScript вызвать окно ”Save As” (сохранить как) ??? , не путать с ”Открыть”
Что бы юзер мог выбрать папку из существующих и вписать название нового файла, потом этот путь и введенное имя файла надо вернуть в скрипт.
Изображение

2. Путь что из первого пункта может оказаться с длинными именами, как его обрезать до короткого формата ??? (экзешник не понимает когда ему даешь длинные пути), вроде есть какая-то стандартная функция в VBS

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 25.06.2008 (Ср) 20:56

1)
Код: Выделить всё
    Set dlg = CreateObject("MSComDlg.CommonDialog")
    dlg.ShowSave

2) Понимает. Длинные пути передаются в кавычках.
Лучший способ понять что-то самому — объяснить это другому.

serg28serg
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 24.06.2008 (Вт) 11:28
Откуда: Санкт-Петербург

Сообщение serg28serg » 25.06.2008 (Ср) 22:54

Antonariy писал(а):1)
Код: Выделить всё
    Set dlg = CreateObject("MSComDlg.CommonDialog")
    dlg.ShowSave
.

Пробовал вставлять в HTA файл по всякому (с максимумом аргументов и без) , диалог "Save As" не всплывает :(

Все таки пошел через
Код: Выделить всё
set oDlg= createObject("safrcFileDlg.fileSave")
oDlg.fileName= "*.hex"
oDlg.fileType= "Файлы прошивки"
qSln= cbool(oDlg.openFileSaveDlg)
select case qSln
   case true
      wscript.echo oDlg.fileName
   case false
      wscript.echo "Dialog cancelled."
end select

strFilehex = oDlg.fileName



Antonariy писал(а):2) Понимает. Длинные пути передаются в кавычках.

Я по этому пути не экзешник запускаю, а отдаю экзешнику файл с путем как аргумент командной строки, а он ни каких кавычек и пробелов в пути не приемлет – не умеет фильтровать , как то нужно в формат 8.3 путь превратить

Вот нашел пример через
Код: Выделить всё
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("C:\autoexec.bat")
Str = vbNullString
Str = Str & "Путь в формате 8.3 - " & File.ShortPath & vbCrLf
MsgBox Str


Но как на место "C:\autoexec.bat", мне свою переменную с путем подставить ?

ЗЫ: после часа проб и ошибок в конце концев откопал :)
Код: Выделить всё
Set File = FSO.GetFile("" & strFilehex & "")


Кто-нибудь даст мне ссылку на подробное объяснение как использовать кавычки ??? , где ставят по две с каждой стороны, где по четыре с каждой, сколько копаюсь в VBScripte, до сих пор так и не понял, каждый раз на этом напарываюсь. :(

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.06.2008 (Чт) 0:52

Смешно прибавлять к строку пустую строчку справа и пустую строчку слева...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 26.06.2008 (Чт) 8:28

Пробовал вставлять в HTA файл по всякому (с максимумом аргументов и без) , диалог "Save As" не всплывает
Тогда юзай <object>.
как то нужно в формат 8.3 путь превратить
FSO.File.ShortPath
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.06.2008 (Чт) 8:32

Antonariy писал(а):Set dlg = CreateObject("MSComDlg.CommonDialog")

А ты уверен, что это сработает?
MSComDlg.CommonDialog это ActiveX Control, который ставится и регистрируется в системе при установке VB. Стандартно его нет.
Я бы скорее диалоги офиса использовал.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 46

    TopList  
cron