0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 3
1

Не получается вложить словарь в словарь

14.08.2016, 22:06. Показов 3010. Ответов 4
Метки нет (Все метки)

Друзья, доброго времени суток!

Не могу понять, почему у меня не получается вложить словарь в словарь.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Set Header = CreateObject("Scripting.Dictionary")  
    Dim ColName As Variant
    Dim CNames As Variant
    Dim Ctr As Long
    Dim BufNames As Object
    Set BufNames = CreateObject("Scripting.Dictionary")
    CNames = Split(NamesOfColumns, "|||")
    Ctr = 0
    For Each ColName In CNames
        BufNames.Add ColName, Ctr
        Ctr = Ctr + 1
    Next
    Header.Add "NAMES", BufNames
    NumOfColumns = Ctr
В Watches почему-то пишет, что item "Names" в словаре Header содержит значение типа Variant/String. При этом BufHeader в порядке, все элементы отображаются нормально.
Может требуются какие-то дополнительные итерации, чтобы засунуть туда ссылку на объект?
Весь вечер мучаюсь, не могу понять в чем дело. Если кто знает в чем дело, подскажите, пожалуйста.

С уважением.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2016, 22:06
Ответы с готовыми решениями:

Словарь
Как создать словарь(русско-английский) в паскале хелп плиззз...... Вообще с чего начать и есть ли...

Словарь
Здравствуйте! Помогите пожалуйста..нужно создать словарь на vba.. программа должна работать, как...

словарь
что-то не могу найти словарь русского языка, желательно не в xml, а в txt формате, помогите...

Словарь
В общем, нужна помощь со словарями, ибо я не совсем вижу у себя ошибку (хотя может быть я просто...

4
414 / 262 / 82
Регистрация: 27.10.2012
Сообщений: 860
14.08.2016, 22:31 2
Лучший ответ Сообщение было отмечено ClearKbdBuf как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub uuu()
    Dim x&
    Dim sd1 As Object, sd2 As Object
'--------------------------------------------
    Set sd1 = CreateObject("Scripting.Dictionary")
    Set sd2 = CreateObject("Scripting.Dictionary")
    
    For Each el In Array("a", "b", "c")
        x = x + 1
        sd1.Item(el) = x
    Next
 
    Set sd2.Item("NAMES") = sd1
    
    sd_keys = sd2.keys
    sd_items = sd2.Items
 
    sd_sub_dic_keys = sd2.Item("NAMES").keys
    sd_sub_dic_items = sd2.Item("NAMES").Items
    
End Sub
    
Sub ttt()
    Dim x&
    Dim sd As Object
'---------------------
    Set sd = CreateObject("Scripting.Dictionary")
    Set sd.Item("NAMES") = CreateObject("Scripting.Dictionary")
    
    For Each el In Array("a", "b", "c")
        x = x + 1
        sd.Item("NAMES").Item(el) = x
    Next
 
    sd_keys = sd.keys
    sd_items = sd.Items
 
    sd_sub_dic_keys = sd.Item("NAMES").keys
    sd_sub_dic_items = sd.Item("NAMES").Items
    
End Sub
1
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 3
15.08.2016, 09:57  [ТС] 3
Спасибо за Ваш отзыв!

Я попробовал сделать как Вы прописали:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    
 
    Dim ColName As Variant
    Dim CNames As Variant
    Dim Ctr As Long
    Dim BufNames As Object
    
    Set Header = CreateObject("Scripting.Dictionary")
    Set BufNames = CreateObject("Scripting.Dictionary")
    CNames = Split(NamesOfColumns, "|||")
    Ctr = 0
    For Each ColName In CNames
        BufNames.Add ColName, Ctr
        Ctr = Ctr + 1
    Next
    NumOfColumns = Ctr
    Set Header.Item("NAMES") = BufNames
Ситуация не меняется. Я приложил скриншот с содержимым переменных для наглядности. такое ощущение, что баг в екселе. Однако, мне тяжело в это поверить, я все же думаю, что я где-то не так делаю.
Миниатюры
Не получается вложить словарь в словарь  
0
Заблокирован
15.08.2016, 10:31 4
Цитата Сообщение от ClearKbdBuf Посмотреть сообщение
'Set Header.Item("NAMES") = BufNames
Visual Basic
1
Header.Add BufNames, 0
?
1
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 3
15.08.2016, 10:46  [ТС] 5
Друзья, спасибо Вам за ответы!

На самом деле все вкладывалось!

Вложенные объекты в Watches действительно отображаются как variant/string. Почему не знаю. Однако, воспринимается правильно. Вот скриншот с результатами выполнения процедуры uuu() из примера kalbasiatka.
На нем видно что sd2.item("NAMES") воспринимается как Variant/String. Однако, вызов sd2.item("NAMES").keys выдает массив.

Моя ошибка была в свойстве ColumNames класса VTable. Вот она:

Visual Basic
1
2
3
Public Property Get ColumnNames() As Object
     ColumnNames = Header.Item("NAMES")
End Property
Имея дело со ссылкой на объект, я забыл оператор SET

Исправил на

Visual Basic
1
2
3
Public Property Get ColumnNames() As Object
     Set ColumnNames = Header.Item("NAMES")
End Property
Все заработало.

Я благодарю всех пользователей, которые отозвались по моей проблеме!
Миниатюры
Не получается вложить словарь в словарь  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2016, 10:46
Помогаю со студенческими работами здесь

Словарь
Всем доброе суток! пишу прогу словарь все сделал кроме такого алгоритма! вот например если...

Словарь
Нужно создать страницу, ~словарь. Простая таблица 5 текстовых полей с описанием + 2 индекса(1...

Словарь
Мой файл данных (dict.txt) имеет вид "en_word=ru_word", т.е. в каждой строке содержится английское...

Словарь
Требуется создать словарь, что бы был поиск по словам и при выборе нужной буквы выходил список всех...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru