gpt4 book ai didi

vba - 字典通配符搜索

转载 作者:行者123 更新时间:2023-12-02 10:10:26 24 4
gpt4 key购买 nike

搜索谷歌和SO后,我发现有一种方法可以让我在字典中搜索现有的键:

dict.exists("search string")

我的问题是如何使用通配符搜索字典:

dict.exists("search*")

我想首先在字典中搜索术语,因为我的宏让用户选择一组文件(文件名作为字典键,完整路径作为值),并且我想确定是否具有特定命名的文件在我迭代字典元素以应用文件处理之前,组中存在约定。

如果找到某种命名约定,则对字典中的每个文件运行 X 处理,而不是 Y 处理。诀窍在于,如果任何元素遵循一定的命名约定,那么它们都需要进行相应的处理。也就是说,如果元素1-19不符合约定,但元素20通过,则元素1-20都需要进行特殊处理。这就是我不能边走边检查每个名称并一次有选择地处理一个文件的原因。

我当前的解决方案是在搜索命名约定后迭代整个字典,然后在知道处理文件时使用哪种方法后重新迭代字典。我循环遍历所有元素两次,这似乎效率不高......

你们有通配符搜索字典键的合理解决方案吗?

最佳答案

Dictionary Items 方法返回所有项目的数组。您可以将它们连接成一个大字符串,然后使用 Instr() 来确定您的搜索字符串是否在该大字符串中。

从您的示例中,末尾有星号,因此我假设您关心项目如何开始,而不是子字符串存在于任何地方。因此,我寻找分隔符+子字符串并将分隔符添加到Join的前面(为了第一项)。如果您有不同的要求,则必须进行调整,但理论是相同的。

我使用两个管道作为分隔符,因为它不太可能出现在数据中并返回误报。这可能不适合您的数据。

Public Function WildExists(ByRef dc As Scripting.Dictionary, ByVal sSearch As String) As Boolean        
Const sDELIM As String = "||"
WildExists = InStr(1, sDELIM & Join(dc.Keys, sDELIM), sDELIM & sSearch) > 0
End Function

测试代码

Sub Test()

Dim dc As Scripting.Dictionary
Set dc = New Scripting.Dictionary

dc.Add "Apple", "Apple"
dc.Add "Banana", "Banana"
dc.Add "Pear", "Pear"

Debug.Print WildExists(dc, "App") 'true
Debug.Print WildExists(dc, "Ora") 'false

End Sub

关于vba - 字典通配符搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com