Проверка пустого элемента словаря (не ключа)

Время от времени в словарь добавляется пустой элемент, когда я не проверяю, существует ли ключ. Я знаю, почему это происходит, но не знаю, как проверить, произошло ли это. Например, в сегменте кода ниже;

dictVar("Happy") = 23
dictVar("Lucky") = 666
if (dictVar("Oopsie") = 23) then
   {Do Something}
end if

Я по ошибке проверяю запись «Упси». В списке наблюдения Dictionary.keys будут показаны 3 ключа, в списке Dictionary.items — 23 и 66 соответственно для «Happy» и «Lucky». «Упси» показывает «Пусто» в качестве значения (без кавычек), поскольку ключ не существовал, когда я ссылался на него. Ничего удивительного.

Я хотел бы написать процедуру для решения подобных проблем, но не могу найти ничего о том, как проверить элемент словарного ключа на «Пусто». Я пробовал «пусто» и «ничего» — оба терпят неудачу, поскольку значение элемента кажется недоступным.

Все, что я нахожу в Интернете, относится к пустому ключу, и он добавляет, если сначала не проверяет EXISTS, то ничего не добавляет к проверке самого значения элемента.

Есть ли способ проверить это?

Сначала проверьте, существует ли ключ, а затем проверьте, является ли значение, связанное с ключом, пустым.

Tim Williams 15.07.2024 00:11
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не уверен, что это то, что вам нужно, но попробуйте...

Если вы хотите проверить, пуст он или нет, используйте альтернативный оператор IF.

Sub Test()
    Dim dictVar As Object, Key As Variant
    Dim myCheck As Boolean
    
    myCheck = False
    
    Set dictVar = CreateObject("Scripting.Dictionary")
    
    dictVar("Happy") = 23
    dictVar("Oopsie") = 9978
    dictVar("Lucky") = 666
    
    For Each Key In dictVar.keys
        If Key = "Oopsie" And dictVar(Key) = 99 Then
'        If Key = "Oopsie" And dictVar(Key) <> "" Then
           myCheck = True
           Exit For
        End If
    Next
    
    MsgBox IIf(myCheck, "OK", "Not OK")
End Sub

Ну, это просто странно :( Клянусь, я пробовал раньше, и оператор IF дал сбой. На этот раз это сработало, так что да! Я проверяю, используя .EXISTS при кодировании. Мне просто было любопытно, как это проверить, поскольку сбои обычно происходят из-за ошибка кодирования/логическая ошибка (когда код ожидал наличия определенного ключа, но я закодировал неправильную переменную или условие ключа), которые в любом случае необходимо исправить. Было бы неплохо, если бы вы могли проверить конкретно «Пустой» как. Я видел некоторые возможности, когда пробел может быть допустимым значением элемента. Еще раз спасибо.

NewbieBAT 16.07.2024 19:08

Вы пробовали, если Key = "Oopsie" И dictVar(Key) <> "" Тогда

Haluk 16.07.2024 20:27

Как я уже сказал, «Oopsie» был всего лишь примером. Когда у меня происходит сбой, это происходит из-за неожиданного события (например, я не знаю, какой ключ используется), поэтому я (я) строил общую ловушку ошибок. <>"" работает в большинстве случаев, если пустой элемент не может быть допустимой записью. В моем случае это правда. Для некоторых это может быть не так. Удивительно, что здесь нет пустой проверки build-it, поскольку Nothing и Empty являются допустимыми сравнениями для других типов переменных, но не для словарей. Пустой элемент является распространенным экземпляром просто из-за того, как обрабатываются переменные Dict. Но ответ, указанный выше, мне подходит.

NewbieBAT 18.07.2024 16:09

Если ключ «Oopsie» не существует в словаре, следующий код создаст новый ключ с именем «Oopsie» с пустым значением.

if (dictVar("Oopsie") = 23) then

Прежде чем приступить к использованию оператора if, используйте функцию Exists, чтобы проверить наличие ключа в объекте словаря.

dictVar("Happy") = 23
dictVar("Lucky") = 666
Const SKEY = "Oopsie"
If dictVar.Exists(SKEY) Then
    If dictVar(SKEY) = 2 then
       {Do Something}
    End If
Else
    MsgBox "the key " & SKEY & " is not exits"
End If

Другие вопросы по теме