Как при создании переменной динамически генерить её имя

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

Как при создании переменной динамически генерить её имя

Сообщение Wildwhiteash » 21.06.2007 (Чт) 17:42

примерно вот такая задача
из некого буфера (buferS) набиваются данные в ListView
Код: Выделить всё
Dim CountModules As Integer
Dim AAa As Integer

Dim ItmM As ListItem
Dim XXX As Integer
Dim HID As String
Dim MoDnAmE As String
Dim ModStart As String
Dim ModLen As String
Dim ModCyl As String
Dim ModGroup As String

CountModules = (BuferS(&H16) * 16)
    For AAa = 1 To CountModules Step 16
        Set ItmM = lw1.ListItems.Add(, , "", , 1)
        ItmM.Checked = True
        HID = Str(BuferS(AAa + &H21))
        If Val(HID) < 16 Then HID = "0" + Hex(HID) Else HID = Hex(HID)
        ItmM.SubItems(1) = HID
       
        MoDnAmE = Chr$(BuferS(AAa + &H22)) + _
        Chr$(BuferS(AAa + &H23)) + Chr$(BuferS(AAa + &H24)) + _
        Chr$(BuferS(AAa + &H25)) + Chr$(BuferS(AAa + &H26)) + _
        Chr$(BuferS(AAa + &H27)) + Chr$(BuferS(AAa + &H28)) + _
        Chr$(BuferS(AAa + &H29))
        ItmM.SubItems(2) = MoDnAmE


--->>>> вот в этом месте мне нужно сделать обьявление массива
с именем MoDnAmE, чтоб у меня в памяти выросла кучка массивов с вполне определенными (MoDnAmE) именами
т.е. что то типа Dim (MoDnAmE) (на 20 элементов) As Byte
Код: Выделить всё
        ModStart = Hex(BuferS(AAa + &H2A)) + Hex(BuferS(AAa + &H2B))
        If Len(ModStart) < 3 Then ModStart = "0" + ModStart
        ItmM.SubItems(3) = ModStart
       
        ModLen = Hex(BuferS(AAa + &H2C)) + Hex(BuferS(AAa + &H2D))
        If Len(ModLen) < 3 Then ModLen = "0" + ModLen
        ItmM.SubItems(4) = ModLen
       
        ModCyl = Hex(BuferS(AAa + &H2E))
        If Len(ModCyl) = 1 Then ModCyl = "0" + ModCyl
        ItmM.SubItems(5) = ModCyl
       
        ModGroup = Hex(BuferS(AAa + &H2F))
        If Len(ModGroup) = 1 Then ModGroup = "0" + ModGroup
        ItmM.SubItems(6) = ModGroup
       
        ItmM.SubItems(7) = ""
       
Next AAa

и чего то не могу сообразить как.
подскажите люди добрые

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

Сообщение Хакер » 21.06.2007 (Чт) 19:04

Так как ты хочешь, сделать нельзя. Но можно использовать коллекцию или словарь (dictionary).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wildwhiteash
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 21.06.2007 (Чт) 17:02
Откуда: Украина, Николаев

Сообщение Wildwhiteash » 21.06.2007 (Чт) 23:42

Хакер
Если не сложно, то ПЛЗ ткни носом в пример
:oops:
Пока появилось еще пару мыслей на эту тему.
1.Заталкивать данные не в массивы с именами, а прямо в ListView.SubItem(x)
но при обьеме данных примерно от 512 байт до 300 килобайт, что то мне подсказывает, что вся эта схема будет жутко тормозить.
2. Мысля крутится возле CreateFileMapping
но с ним ни разу не ковырялся.

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

Сообщение Хакер » 21.06.2007 (Чт) 23:56

Ткнуть в пример чего?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wildwhiteash
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 21.06.2007 (Чт) 17:02
Откуда: Украина, Николаев

Сообщение Wildwhiteash » 22.06.2007 (Пт) 0:25

Хакер
или словарь (dictionary).

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

Сообщение Хакер » 22.06.2007 (Пт) 0:38

Код: Выделить всё
Dim dic as object
set dic = createobject("Scripting.Dictionary")
dic.add "Jaka", 46
dic.add "fasf", "STRING-STRING"
dic.add "экран", screen

dim MyByteArray(1 to 20) as byte

MyByteArray(1) = 123
MyByteArray(2) = 77
MyByteArray(15) = 13

dic.add "my_array", MyByteArray

msgbox dic("Jaka")
Msgbox dic("fasf")
msgbox dic("экран").width

msgbox dic("my_array")(1)
msgbox dic("my_array")(2)
msgbox dic("my_array")(15)

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 22.06.2007 (Пт) 11:53

Wildwhiteash
Белов чтоли?

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

Сообщение Хакер » 22.06.2007 (Пт) 12:07

kibernetics
Что это было?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Niko
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 102
Зарегистрирован: 16.03.2006 (Чт) 14:43

Сообщение Niko » 22.06.2007 (Пт) 12:20

Wildwhiteash
Белов чтоли?

по исходнику фамилию отределил! :shock:

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 22.06.2007 (Пт) 12:25

Хакер
Ник просто одного очень хорошего человека. Так вот я думаю, не он ли это? Если узнает что изображено на моей аватаре, значит он :D

Добавлено:
П.С. Он это. Стопудолво... В коде у него:

Код: Выделить всё
Dim MoDnAmE As String
Dim ModStart As String
Dim ModLen As String
Dim ModCyl As String
Dim ModGroup As String


что примерно означает: имя модуля, его длину, старт... цилиндр и т.д.
Последний раз редактировалось kibernetics 22.06.2007 (Пт) 12:32, всего редактировалось 1 раз.

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

Сообщение Хакер » 22.06.2007 (Пт) 12:28

Значит, встречу старых друзей организовывайте через Личные сообщения, а не через эту тему :!:

В крайнем случае, можно отписаться потом, когда выяснится, Белов это был или нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.06.2007 (Пт) 12:55

Я не Белов, но на аватаре вижу логотип Marvell: http://www.marvell.com/
Изображение

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 22.06.2007 (Пт) 14:13

tyomitch
да, верно :)
это марвел
проц от винчестера самсунговского

Wildwhiteash
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 21.06.2007 (Чт) 17:02
Откуда: Украина, Николаев

Сообщение Wildwhiteash » 23.06.2007 (Сб) 13:54

kibernetics
Wildwhiteash
Белов чтоли?
да:shock:
"Кто здесь ? :shock: "(с)немой
(дальнейшее обсуждение с kibernetics перенесено в приват)
---
Хакер
Спасибо.
Буду пробовать обсмыслить.

Wildwhiteash
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 21.06.2007 (Чт) 17:02
Откуда: Украина, Николаев

Сообщение Wildwhiteash » 23.06.2007 (Сб) 14:19

Хакер

Понял,обсмыслил :)
спасибо :)
буду пробовать прикрутить к моему коду

Wildwhiteash
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 21.06.2007 (Чт) 17:02
Откуда: Украина, Николаев

Сообщение Wildwhiteash » 24.06.2007 (Вс) 14:04

блин :)
пока писал о баге и что где не получается, додумал как сделать :)
пользуясь случаем кину сюда
мож кому сгодится
Код: Выделить всё
Private Sub ReadModule(ID)
Dim rmN As String
Dim TmpBuf
Dim ModStart As String
Dim ModStartPlus1 As Integer
Dim ModLen As String
Dim ModCyl As String
Dim ModName As String
Dim ItmM As ListItem
Dim L1 As Label
lw1.Icons = IL1 ' выставляются иконки из ImageList (IL1)
'выгребаются значения из ListView
    ModName = lw1.SelectedItem.SubItems(2)
    ModStart = lw1.SelectedItem.SubItems(3)
    ModLen = lw1.SelectedItem.SubItems(4)
    ModCyl = lw1.SelectedItem.SubItems(5)
    ModStartPlus1 = (1 + Val("&H" + ModStart))
'расталкиваются по переменным для дальнейшего действа
'(LoadRegistrers)   
    R2H = (Val("&H" + ModLen) \ 256)
    R2L = (Val("&H" + ModLen) Mod 256)
    R3H = (ModStartPlus1 \ 256)
    R3L = (ModStartPlus1 Mod 256)
    R4H = (Val("&H" + ModCyl) \ 256)
    R4L = (Val("&H" + ModCyl) Mod 256)
    R5H = 0
    R5L = 0
    R6 = 'цифера вырезана по идейным соображениям
    R7 = 'цифера вырезана по идейным соображениям
    Call LoadRegisters
    Delay (10) '-типа пауза в 10 милисек
L1:    If BUSY = True Then GoTo L1
    If ERR = True Then
MsgBox "Обшибка при чтении " + ModName, vbInformation, "error :("
    lw1.SelectedItem.SmallIcon = "B"
Else
    Call ReceiveData ' это такая процедурина которая данные из порта
'хавает в Буфер
    rmN = Trim(lw1.ListItems(SelectedItemMenuMod).ListSubItems(1) + lw1.ListItems(SelectedItemMenuMod).ListSubItems(2))
   
    dic.Item(rmN) = BuferS ' в словарь затолкали содержимое буфера

    lw1.SelectedItem.SmallIcon = "G" 'выставили иконку по итогу операции
End If
End Sub
'-------------
Private Sub Write2File()
Dim rmN As String
Dim TmpBuf As Byte
Dim ModStart As String
Dim ModStartPlus1 As Integer
Dim ModLen As String
Dim ModCyl As String
Dim ModName As String
Dim ItmM As ListItem
Dim XX As Long
Dim L1 As Label
lw1.Icons = IL1
'пришлось сделать т.к. ниже , иначе чего то иконки не менялись
If lw1.SelectedItem.SmallIcon = 1 Then Exit Sub
If lw1.SelectedItem.SmallIcon = 3 Then Exit Sub
If lw1.SelectedItem.SmallIcon = "B" Then Exit Sub
If lw1.SelectedItem.SmallIcon = "N" Then Exit Sub

    ModName = lw1.SelectedItem.SubItems(2)
    ModStart = lw1.SelectedItem.SubItems(3)
    ModLen = lw1.SelectedItem.SubItems(4)
    ModCyl = lw1.SelectedItem.SubItems(5)
    ModStartPlus1 = (1 + Val("&H" + ModStart))

'выбрал в переменную интересующий меня элемент списка
    rmN = Trim(lw1.ListItems(SelectedItemMenuMod).ListSubItems(1) + lw1.ListItems(SelectedItemMenuMod).ListSubItems(2))

'затолкал в Буфер вот то что хранилось в словаре
    BuferS = dic.Item(rmN)
'вызывается OPEN\SAVE диалог и записывает содержимое буфера в файл
    Call saveF

End Sub


Фсё! :)
Ушел в отпуск :)


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 72

    TopList