在我的論文中,訂單執行的排序是使用Rule-Based Sorting
意即先依據某屬性遞增或遞減排列,
若該屬性有一樣的值,則使用其他指定屬性遞增或遞減排序
直到排完全部的訂單

舉例說明如下,
這裡有四張訂單資訊(orderInfo.csv)
no,product,qty,dueday
1,A,100,2007/6/1
2,B,100,2007/6/5
3,A,200,2007/6/5
4,B,200,2007/6/1

no為訂單編號
product為產品名稱
qty為產品數量
dueday為到期日


假設排序規則
到期日越早的訂單越先執行(小->大=>遞增)
若到期日一樣
則以數量大的優先(大->小=>遞減)
若數量都一樣則以訂單編號小的先執行(小->大=>遞增)

此例中
1,4的訂單為6/1到期
2,3的訂單為6/4到期

1,4 中4的數量(200)大於1的數量(100)
2,3 中3的數量(200)大於2的數量(100)

因此可得出以下的訂單順序4,1,3,2
(不用再比訂單編號了)

在PowerShell中
有一個cmdlet稱為Sort-Object
可提供排序的功能

若要達到上述的要求
可用如下的Script


Import-Csv orderInfo.csv | sort @{Expression={[datetime]$_.dueday};Ascending=$true},@{Expression={[int]$_.qty};descending=$true},@{Expression={[int]$_.no};Ascending=$true}

 

第一部分將訂單資訊從csv檔案取出
 Import-Csv orderInfo.csv

第二部分為訂單排序
由於我們要指定
(1)到期日越早的訂單越先做(小-大=>遞增),所以
    @{Expression={[datetime]$_.dueday};Ascending=$true}
(2)若到期日一樣則以數量大的優先(大->小=>遞減),所以
    @{Expression={[int]$_.qty};descending=$true}
(3)若數量一樣則以訂單編號的優先(小-大=>遞增),所以
    @{Expression={[int]$_.qty};Ascending=$true}


其中[datetime],[int]表示將資料轉型,以確保以正確的資料型態進行排序

執行結果畫面如下
 

arrow
arrow
    全站熱搜

    ayowu 發表在 痞客邦 留言(0) 人氣()