回 帖 发 新 帖 刷新版面

主题:如何只搜數組中的一列

一個組合框控件,資料來源為數組,想做一個模糊查找的功能,即:輸入的一個字符或幾個字符和數組中的某特定的列(一般為第一列)相匹配時,則數組就只顯示其匹配的數據.如:

  數組:
  料號            規格           單位

  ABC12345      ABCDEFG          PCS
  ABC54321      1234500          PCS
  CBA12345      ABCDEFK          M

  以上,需按"料號"列進行左匹配,即如何讓輸入的字符只在"料號"中搜,而不是在整個數組中搜.
  例:ASCAN(ARRAY,"ABC") ----返回1,ASCAN(ARRAY,"M")----返回0,而不是返回9

回复列表 (共6个回复)

沙发

1.ASCAN()可以按列搜:
? ASCAN(gaArray,"ABC54321",1,0,1)   && 在第一列搜

2.ASCAN()返回一个元素号,可用ASUBSCRIPT()转换回行、或列:
? ASUBSCRIPT(gaArray, ASCAN(gaArray,"ABC54321",1,0,1), 1)  && 转换成行

3.转换前要判定:ASCAN()>0

板凳

[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 楼

"1,0,1":nStartElement,nElementsSearched,nSearchColumn
nStartElement----指搜索操作的起始元素,这里是 1
nElementsSearched----指定要搜索的元素個數,这里缺省 0
nSearchColumn----指定搜索是按行(1)或是列(2)或是全部数组(0),这里是 1

4 楼

[quote]"1,0,1":nStartElement,nElementsSearched,nSearchColumn
nStartElement----指搜索操作的起始元素,这里是 1
nElementsSearched----指定要搜索的元素個數,这里缺省 0
nSearchColumn----指定搜索是按行(1)或是列(2)或是全部数组(0),这里是 1
[/quote]


其實還是沒有搞明白.

起始元素,這個可以理解.但指定要搜索的元素個數為什麼是"0","0"是不是代表無數個呢?每三個就更費解,我是要按列搜,而不是按行收,為什麼不是"2"反而用"1"

以上煩請再解解惑.

再次感謝.

5 楼

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 楼

I VERY VERY LIKE ILIKEFOX!YOU ARE MY SUPER STAR!

我来回复

您尚未登录,请登录后再回复。点此登录或注册