我要做一個批量手機號碼歸屬地查詢,有兩個串列控制元件
listM
13899990000
13588880000
13322321234
.....
listA
1389999 地區A
1351111 地區B
1332232 C
.....
這樣兩個串列,我要從listM對比listA得出地區。怎么回圈。
uj5u.com熱心網友回復:
肯定是遍歷listM中條目了。每一個listM專案,如13899990000,再去第二個串列中從頭到尾查找匹配項。uj5u.com熱心網友回復:
把listA先排序,寫個函式用二分查找法。只要對listM一層回圈即可,回圈內呼叫查找函式。
uj5u.com熱心網友回復:
Like 運算子
用來比較兩個字串。
語法
result = string Like pattern
Like 運算子的語法具有以下幾個部分:
部分 描述
result 必需的;任何數值變數。
string 必需的;任何字串運算式。
pattern 必需的;任何字串運算式,遵循“說明”中的模式匹配約定。
說明
如果 string 與 pattern 匹配,則 result 為 True;如果不匹配,則 result 為 False。但是如果 string 或 pattern 中有一個為 Null,則 result 為 Null。
Like 運算子的特性隨著 Option Compare 陳述句而不同。每個模塊的預設字串比較方法是 Option Compare Binary。
在字串比較中,Option Compare Binary 的結果是根據字符的內部二進制表示法匯出的排序順序得到的。在 Microsoft Windows 中,排序順序由代碼頁決定。下例說明通常二進制的排序順序:
A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ < ?/FONT>
在字串比較中,Option Compare Text 的結果是字串比較,它建立在不區分大小寫的文本排序順序基礎上,而這一排序順序是由系統的國別確定的。在對相同的字符使用 Option Compare Text 時會產生以下文本排序順序:
(A=a) < (_=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_)
內建的模式匹配功能提供了多種工具來進行字串比較。有了模式匹配功能就可以使用通配符、字串串列或字符區間的任何組合來匹配字串。下串列格指出 pattern 中允許的字符以及它們與什么進行匹配:
pattern 中的字符 符合 string 中的
? 任何單一字符。
* 零個或多個字符。
# 任何一個數字 (0–9)。
[charlist] charlist.中的任何單一字符。
[!charlist] 不在 charlist 中的任何單一字符。
在中括號 ([ ]) 中,可以用由一個或多個字符 (charlist) 組成的組與 string 中的任一字符進行匹配,這個組幾乎包括任何一個字符代碼以及數字。
注意 為了與左括號 ([)、問號 (?)、數字符號 (#) 和星號 (*) 等特殊字符進行匹配,可以將它們用方括號括起來。不能在一個組內使用右括號 (]) 與自身匹配,但在組外可以作為個別字符使用。
通過在范圍的上、下限之間用連字符 (–),charlist 可以指定字符的范圍。例如,如果 string 中相應字符的位置包括 A–Z 之間的任意大寫字母,則 [A-Z] 得到一個匹配。不需要分界符,方括號內就可以包括多個范圍。
指定范圍的意義取決于運行時的有效字符排序(正如 Option Compare 和系統的國別設定所確定的,代碼在運行之中)。使用 Option Compare Binary 示例可以看到,范圍 [A–E] 與 A、B 和 E 相匹配。通過 Option Compare Text 可以看到,[A–E] 與 A, a, _, _, B, b, E, e 相匹配。此范圍與 _ 或 _ 不匹配,因為按照排序順序,重音字符在非重音字符之后。
下面列舉的是模式匹配的其它重要規則:
charlist 開頭的驚嘆號 (!) 意味著,如果在 string 中找到任何不屬于 charlist 的字符,則存在一個匹配。如果在方括號之外使用驚嘆號,則驚嘆號與自身匹配。
連字符 (–) 可以出現在 charlist 的開頭(如果使用驚嘆號,則在驚嘆號之后),也可以出現在 charlist 的結尾與自身匹配。在任何其它地方,連字符用來識別字符的范圍。
當指定了字符范圍時,這些字符必須按照升序(從最小到最大)順序來顯示。[A-Z] 是有效模式,但 [Z-A] 不是。
字符序列 [] 被看作是長度為零的字串 ("")。
某些語言的字母表中有一些特殊字符,它們表示兩個分開的字符。例如,在一些語言中,當字符 "a" 與 "e" 同時出現時,用 "_" 來表示字符 "a" 與 "e"。Like 運算子可以辨認出單一的特殊字符和兩個個別字符是否相等。
當一個語言使用了一個特殊字符,而且這個字符在系統地區設定中已被指定的時候,在 pattern 或 string 中出現的單一特殊字符將與其他字串中等價的兩個字符相匹配。與此相似,由方括號括起來的 pattern 中的單一特殊字符(字符本身在串列或范圍內)將與 string 中等價的兩個字符序列匹配。
uj5u.com熱心網友回復:
Private Declare Function SendMessagebyString Lib "user32" Alias "SendMessageA" (ByVal hWND As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const LB_FINDSTRINGEXACT = &H1A2 '在 ListBox 中精確查找
Private Sub Command1_Click()
Dim i As Long, n As Long
For i = 0 To ListM.ListCount - 1
n = SendMessagebyString(ListA.hWnd, LB_FINDSTRINGEXACT, -1, Left(ListM.List(i), 7))
If n > -1 Then Debug.Print ListM.List(i), ListA.List(n)
Next i
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/92512.html
標籤:VB基礎類
