資料欄位自動排序矩陣

![|469x197](upload://1COG0iSgnta8k84o9ns8uCRr0mp.jpeg)

資料欄位是字串或是數字,目前想要做一個排序的功能,但不知從何下手,

請知道的給個方向建議或是範例,感謝!

需要的功能下:

    當我按下最上面欄位"年齡"時,年齡會從最小排到最大,再按一次則相反,且資料需要連同姓名、學號...等等,做整體性的排序。

以下有幾個範例可參考

http://zone.ni.com/devzone/cda/epd/p/id/11

http://zone.ni.com/devzone/cda/epd/p/id/570

http://decibel.ni.com/content/docs/DOC-2332

1.用Event Structure判斷滑鼠在Table上按下.

2.判定按下的位置是在Column Headers上嗎?

3.判定排序是小到大還是大到小.

4.排序用數字或字串.

下面程式給你參考

TEST0929.vi

[QUOTE=DonWang]

1.用Event Structure判斷滑鼠在Table上按下.

2.判定按下的位置是在Column Headers上嗎?

3.判定排序是小到大還是大到小.

4.排序用數字或字串.

下面程式給你參考

TEST0929.vi

[/QUOTE]

這也是一個好方法,小問題是程式無法停止喔

非常感謝您,就是需要這種東西,比我想像中的簡短,但比較高級,有些不明白。

不過程式真的停不下來耶(我在想可能會是mouse down那邊的問題)

![](upload://bVDOTtohHVXlt8xCT5mr5vwNmbn.jpeg)

關於程式流程想請問:

1.您使用的排序迴圈邏輯是?

最後一個true迴圈應該是做整體一起變動的,不過前三個迴圈就不是很明白了。

2.亮燈部分,是如何判斷我按哪一個column?不明白呢!

 

 

可以試試用Multicolumn Listbox


排序的部份你自己根據不同型態需求自己做, 然後包成SubVI
(例如:字串, 數值, 時間排序等等)

另外我使用了OpenG的Sort Array的VI
引用此VI是可以參考該VI的Input及Output的方式

此示範達到你的要功能有:
1. 整體排序
2. 重覆點擊的向上及向下排序


ColSort.llb

1.因為Event Structure沒加Timeout加上就OK了.按Stop就會停止.

2.我的程式中隱藏有1個布林與數字.新程式秀出來給你看你會較了解.

3.布林的目的在決定由小排到大,還是由大排到小.

4.數字的目的在了解前一次排序的位置與這次是否相同?就在0[0..2]頁若不相同則布林就"OFF",表示第1次按由小排到大.

5.1[0..2]頁舉例說明,當按下"姓名"位置,比較(0,0)<(1,0)嗎?若"OFF"表示(0,0)>(1,0),若布林也是"OFF"就會"True",0列與1列交換.相同若(0,0)<(1,0)且布林也是"ON"也一樣交換.

6.之後(0,0)陸續與(2,0),(3,0),(4,0)比較後(0,0)就是最小或最大.

7.之後(1,0)陸續與(2,0),((3,0),(4,0)比較產生第2小或大.

TEST0930.vi

![](upload://eYhtHIIg65U4NVZJWnAhfC6pzEj.jpeg)

![](upload://bWondRPE99edFYx1C3oCLaGRVDG.jpeg)

![](upload://cDrTqAoQ9bDSF9xq4BD30moiFYc.jpeg)

![](upload://oKAlwNlCda5o1rIDtcl0d7qu8OW.jpeg)

DonWang40451.8532060185

8.之後(2,0)陸續與(3,0),(4,0)比較產生第3小或大.

9.而 Default與(1,2)的case則分別表示處理文字與數字.

10外面(-1)的case表示下的位置是在Column Headers.

程式說明如上,如有問題在互相討論.

![](upload://vehgP2C78z22dkzxevIR97iAgjK.jpeg)

TEST0930?.vi

感謝Donwang的詳細解說,

您所說的註解我已將它們放到各元件旁邊提供程式註解,提供大家下載。

因為我程度較差,所以此畫面各迴圈內容您說得很清楚,但我聽得粉模糊,

不知道您所說的1234項,是對應到哪個loop裡面?

非常感謝您的細心跟耐心^^

[QUOTE=bbsda01]

![](upload://vehgP2C78z22dkzxevIR97iAgjK.jpeg)

TEST0930?.vi

感謝Donwang的詳細解說,

您所說的註解我已將它們放到各元件旁邊提供程式註解,提供大家下載。

因為我程度較差,所以此畫面各迴圈內容您說得很清楚,但我聽得粉模糊,

不知道您所說的1234項,是對應到哪個loop裡面?

非常感謝您的細心跟耐心^^

[/QUOTE]

 

請問有大大能將這程式轉成8.0的嗎QQ??

小弟是用8.0的大大們的程式都開不了囧a

拜託拜託,感恩!!

拜託有沒有大大能幫小弟轉換成8.0呢QQ??

感恩><!!

[QUOTE=tjames111]

拜託有沒有大大能幫小弟轉換成8.0呢QQ??

感恩><!!

[/QUOTE]

我所貼的第一二個連結都還有效,而且是7.1版以上就可開啟

PS.你也可以參考以下連結

http://search.ni.com/nisearch/app/main/p/bot/no/ap/global/lang/en/pg/1/q/sort%202D%20array%20string/

ancle41141.5690972222

[QUOTE=bbsda01]

![](upload://vehgP2C78z22dkzxevIR97iAgjK.jpeg)

TEST0930?.vi

[/QUOTE]

小弟是希望這個程式8.0化QQ

拜託了><感恩QQ

[QUOTE=tjames111][QUOTE=bbsda01]

TEST0930?.vi

[/QUOTE]

小弟是希望這個程式8.0化QQ

拜託了><感恩QQ

[/QUOTE]

FYI

test0930 Folder_LV8.0.rar

[QUOTE=ancle][QUOTE=tjames111][QUOTE=bbsda01]

TEST0930?.vi

[/QUOTE]

小弟是希望這個程式8.0化QQ

拜託了><感恩QQ

[/QUOTE]

FYI

test0930 Folder_LV8.0.rar

[/QUOTE]

感激不盡!!

很奇怪,小弟將這程式融入自己寫的程式中

但按下後Table Contorl閃了一下後還是維持著同樣的狀態

一開始是想說會不會有地方接錯?

但看了一下發現沒有

然後用單步執行(Highlight Execution)去看,Table Contorl就確實的慢慢的一個一個去比對並放置

等離開單步執行後,又跳回原本未執行前的樣子了= =

目前研究是覺得

因為小弟Table Contorl內的值會一直在做不斷的更新

所以瞬間,我的排序做了更動,但值也隨之進來便覆蓋掉以排序好的值了

目前是想這樣改

當我Table Contorl的值變化的時候

就執行排序

所以就小弟的認知,原本事件迴圈是不是要從"當滑鼠按下時"改成"值變化時"呢?

但想了老半天不知道該怎麼改@@

不知道有沒有大大能提點提點呢QQ?

感恩!

[QUOTE=tjames111]

目前研究是覺得

因為小弟Table Contorl內的值會一直在做不斷的更新

所以瞬間,我的排序做了更動,但值也隨之進來便覆蓋掉以排序好的值了

目前是想這樣改

當我Table Contorl的值變化的時候

就執行排序

所以就小弟的認知,原本事件迴圈是不是要從"當滑鼠按下時"改成"值變化時"呢?

但想了老半天不知道該怎麼改@@

不知道有沒有大大能提點提點呢QQ?

感恩!

[/QUOTE]

你可以參考以下文章

http://it360.tw/forum/forum_posts.asp?comefrom_myartical=yes&marwww=aHR0cDovL2l0MzYwLnR3L3VzZXJzL215YXJ0aWNhbC5hc3A/ZG9jdW1lbnRfaWQ9MTQ3Mg&TID=2554