主题:如何只搜數組中的一列
GEORGECHIN
[专家分:440] 发布于 2010-03-14 14:28:00
一個組合框控件,資料來源為數組,想做一個模糊查找的功能,即:輸入的一個字符或幾個字符和數組中的某特定的列(一般為第一列)相匹配時,則數組就只顯示其匹配的數據.如:
數組:
料號 規格 單位
ABC12345 ABCDEFG PCS
ABC54321 1234500 PCS
CBA12345 ABCDEFK M
以上,需按"料號"列進行左匹配,即如何讓輸入的字符只在"料號"中搜,而不是在整個數組中搜.
例:ASCAN(ARRAY,"ABC") ----返回1,ASCAN(ARRAY,"M")----返回0,而不是返回9
回复列表 (共6个回复)
沙发
狐说八道 [专家分:860] 发布于 2010-03-14 15:21:00
1.ASCAN()可以按列搜:
? ASCAN(gaArray,"ABC54321",1,0,1) && 在第一列搜
2.ASCAN()返回一个元素号,可用ASUBSCRIPT()转换回行、或列:
? ASUBSCRIPT(gaArray, ASCAN(gaArray,"ABC54321",1,0,1), 1) && 转换成行
3.转换前要判定:ASCAN()>0
板凳
GEORGECHIN [专家分:440] 发布于 2010-03-14 17:17:00
[quote]1.ASCAN()可以按列搜:
? ASCAN(gaArray,"ABC54321",1,0,1) && 在第一列搜
2.ASCAN()返回一个元素号,可用ASUBSCRIPT()转换回行、或列:
? ASUBSCRIPT(gaArray, ASCAN(gaArray,"ABC54321",1,0,1), 1) && 转换成行
3.转换前要判定:ASCAN()>0[/quote]
ASCAN(Arrayname,eExpression[,nStartElement[,nElementsSearched]])
Arrayname----數組名
Eexpressing----要搜索的字符表達式
nStartElement----指寂搜索操作的起始元素,包含該參數代表元素,如果省略此參數,將搜索整個數組
nElementsSearched---指定要搜索的元素個數.
以上這個是在6.0的工具書上看到的,但在9.0的軟體上會加上nSearchColumn和nFlags兩個參數.
請問這個朋友,此函數的"1,0,1"如何理解呢?
3 楼
狐说八道 [专家分:860] 发布于 2010-03-15 09:17:00
"1,0,1":nStartElement,nElementsSearched,nSearchColumn
nStartElement----指搜索操作的起始元素,这里是 1
nElementsSearched----指定要搜索的元素個數,这里缺省 0
nSearchColumn----指定搜索是按行(1)或是列(2)或是全部数组(0),这里是 1
4 楼
GEORGECHIN [专家分:440] 发布于 2010-03-17 18:28:00
[quote]"1,0,1":nStartElement,nElementsSearched,nSearchColumn
nStartElement----指搜索操作的起始元素,这里是 1
nElementsSearched----指定要搜索的元素個數,这里缺省 0
nSearchColumn----指定搜索是按行(1)或是列(2)或是全部数组(0),这里是 1
[/quote]
其實還是沒有搞明白.
起始元素,這個可以理解.但指定要搜索的元素個數為什麼是"0","0"是不是代表無數個呢?每三個就更費解,我是要按列搜,而不是按行收,為什麼不是"2"反而用"1"
以上煩請再解解惑.
再次感謝.
5 楼
Ilikefox [专家分:5770] 发布于 2010-03-17 22:09:00
ABC12345 ABCDEFG PCS
ABC54321 1234500 PCS
CBA12345 ABCDEFK M
以上是二維數組的樣子。銘記在心先。
ascan()函數使用了nSearchColumn參數,這裡面有點怪怪的地方。先不管這個,只需知道nSearchColumn表示在二維數組的哪一列搜索,即若nSearchColumn為n(n>=1),就表示在第n列搜。若n<1,表示把整個二維數組看作一個一維數組,換句話說,相當於沒有用nSearchColumn。
nElementsSearched是指定要搜索的元素個數,取0時你就認爲是規定表示全部元素(這裡就有點容易產生歧義的地方,等一下說)。先解釋你的疑問:指定要搜索的元素個數為什麼是"0"。剛才我說了,就是個規定。好比你知道1!=1,2!=2,3!=6,但0!無法計算,於是規定0!=1。
nStartElement----指搜索操作的起始元素。你說“這個可以理解”,真是這樣嗎?
看例子:
?ASCAN(gaArray,"ABC54321",1,0,1)
第5參數是1,表示在第1列搜索;第3參數是1,表示從第1個元素開始,這第1個元素恰好是"ABC12345";那麽第4參數0表示搜多少個元素?是全部的9個元素嗎?NO,是第1列的全部元素(共3個)。當然,如果你事先知道第1列有3個元素,可以直接寫成3。問題是有時候我們懶得去計算那一列有多少個元素,並且又想在該列的全部元素中找,於是用0表示該列的全部元素。
?ASCAN(gaArray,"PCS",1,0,3)
第5參數是3,表示在第3列搜索;第3參數是1,表示從第1個元素開始,這第1個元素還是"ABC12345"嗎?NO,這第1個元素是第3列的第1個元素,是"PCS";第4參數0現在你就知道表示第3列的全部元素(共3個)。
有了這兩個例子,下面你應該知道了。
?ASCAN(gaArray,"PCS",2,2,3)
得到6,因爲參數説明了在第3列從第2個元素(也就是原來的第2行第3列的"PCS")開始,搜索2個元素(即搜索範圍是原來的第2行第3列的"PCS"到原來的第3行第3列的"M"),尋找"PCS",當然得到6。
如果錯誤的把第3參數的2認爲是原來的第1行第2個元素"ABCDEFG",從而應該得到3,那就糊塗了。
6 楼
GEORGECHIN [专家分:440] 发布于 2010-03-18 02:18:00
I VERY VERY LIKE ILIKEFOX!YOU ARE MY SUPER STAR!
我来回复