| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2281 人关注过本帖
标题:如何查询字典中的值?
取消只看楼主 加入收藏
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
结帖率:89.13%
收藏
 问题点数:0 回复次数:7 
如何查询字典中的值?
字典内容如图:
图片附件: 游客没有浏览图片的权限,请 登录注册


除了将字典内容全部读取,分解成数组。FOR……Next循环比较。这种方法太慢。

有没有更快更方便的查询方法。

请赐代码,谢谢。

比如我要查询:者 的五笔编码。

[此贴子已经被作者于2022-9-2 16:41编辑过]

搜索更多相关主题的帖子: 字典 比较 内容 查询 方法 
2022-09-02 16:39
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
收藏
得分:0 
回复 2楼 风吹过b
你这种方法不实用。

将文本作为数据库进行检索,应该很快。

程序代码:
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

strPathToTextFile = "C:\Scripts\"
strFile = "Test.txt"

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & strPathtoTextFile & ";" & _
          "Extended Properties=""text;HDR=NO;FMT=Delimited"""

objRecordSet.Open "Select DISTINCT * FROM " & strFile, _
    objConnection, adOpenStatic, adLockOptimistic, adCmdText
………………………………
……………………

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-02 18:47
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
收藏
得分:0 
回复 4楼 kings12333
图片附件: 游客没有浏览图片的权限,请 登录注册


像我这样

你的字典前是一个汉字单字,查询的值不能有汉字(除汉字外都可以)。我才能提供代码。

因为我的代码只能应用于我的场景。


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-06 13:10
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
收藏
得分:0 
将文件全部内容切分为数组,每个数组值为一行。数组常驻内存,避免多次重复读写文件。

找到相对应的数组值就出来了。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-07 20:15
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
收藏
得分:0 
百度上复制粘贴过来的,参考一下

他是查找数组的值,非遍历递归方法。

程序代码:
有序数的快速查找方法(非递归法)
Private Sub Command1_Click()
Dim dd(27) As Long
Dim aa As Long
Dim v As Long
dd(0) = 75
dd(1) = 80
dd(2) = 85
dd(3) = 90
dd(4) = 95
dd(5) = 100
dd(6) = 106
dd(7) = 112
dd(8) = 118
dd(9) = 125
dd(10) = 132
dd(11) = 140
dd(12) = 150
dd(13) = 160
dd(14) = 180
dd(15) = 200
dd(16) = 224
dd(17) = 250
dd(18) = 280
dd(19) = 315
dd(20) = 355
dd(21) = 400
dd(22) = 450
dd(23) = 500
dd(24) = 560
dd(25) = 630
dd(26) = 710
dd(27) = 800
aa = 280 '要查找的数字
v = NumFind(dd, aa) '调用查找函数
If v = -1 Then
MsgBox "没发现要查找的数据", vbExclamation, "提示"
Else
MsgBox "当前要查找的:" & aa & " 值在dd数组的第:" & v & " 个元素。", vbInformation, "信息"
End If
End Sub
Public Function NumFind(ByRef Myarray, FNumber As Variant) As Long
Dim K As Long, I As Long
Dim L1 As Long, R1 As Long
Dim l As Long, R As Long
l = LBound(Myarray): R = UBound(Myarray)
NextLoop:
K = (l + R) Mod 2
If K = 1 Then '中点
I = (l + R + 1) \ 2
Else
I = (l + R) \ 2
End If
If Myarray(I) <> FNumber Then
If Myarray(I) > FNumber Then
L1 = l: R1 = I
Else
L1 = I: R1 = R
End If
If (R1 - L1) = 1 Then '第一个和最后一个
If Myarray(L1) = FNumber Then
NumFind = L1
ElseIf Myarray(R1) = FNumber Then
NumFind = R1
Else
NumFind = -1 '没有发现
End If
Else
l = L1: R = R1
GoTo NextLoop
End If
Else
NumFind = I
End If
End Function

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-07 20:35
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
收藏
得分:0 
看我写的例子,写成函数也很容易:

用FOr...Next应该也不慢吧,找一遍就全出来了。

程序代码:
Private Sub Form_Load()
Dim str As String
str = "白菜价,股票,女朋友,购物,中国银行,汽车商行,交通信号灯,鸡蛋,手表,电脑,网站,工商银行"
s = Split(str, ",")
appoint = "银行"  '要查找的字符串
For i = 1 To UBound(s)
pos = InStr(s(i), appoint)
If pos > 0 Then
MsgBox "你要查找的值在数组:" & "s" & "(" & i & ")" & ""
End If
Next
End Sub




[此贴子已经被作者于2022-9-7 20:56编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-07 20:55
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
收藏
得分:0 
不清楚你的具体需求,反正对于我来说够了。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-07 22:52
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
收藏
得分:0 
回复 12楼 kings12333
以下是引用kings12333在2022-9-7 21:22:55的发言:

如果是这样的方式,就只是少了一个打开TXT的步骤,我实际查找是打开TXT的过程用的INSTR查的,估计没啥区别,反而4000+行的数据常时间驻内存会影响反应速度



用instr函数查,如果多处有相同的字符串,你就傻眼了。

instr默认只能返回字符串第一次出现的位置。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-08 00:20
快速回复:如何查询字典中的值?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038637 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved