接到的需求為,因一個晶舟盒內滿批是 25片,Wafer 刻號是 1,2,3,4,5,.....,25 , 若顯示在報表中會太長而不好顯示,要顯示為 1-25 ,若刻號為 1,2,3,5,7,9,10,11 的話要顯示為 1-3,5,7,9-11。
本來想要在 4gl 內寫程式調整完再輸出給 CR 用,但是 4gl 還是不大熟悉,寫到下班可能還寫不完,故就在 CR 的VisualBasic 編輯器內寫吧,包含Debug時間大約1.5小時,記得古早以前在前公司已經用 VB 寫過此 function並包裝起來,故就只會Call已經忘了邏輯了,當時還寫了半天才寫完,工作了那麼多年果然有進步...。
* 今天才知道陣列的用法,VB 和 CR 內建的VB 第一個索引是不一樣的,VB 陣列是從 0 開始,但 CR 的 VB 是從 1 開始,這個地方 try了好久才搞通....
修改後的畫面如下,
廢話不多說,把 Code 留下來,以後若有需要就可以直接拿起來用...
Dim sWaferID As String
Dim aWaferID() As String
Dim sWaferIDOutput As String
Dim sTemp As String
Dim sCurr As String
Dim sPre As String
Dim sStartIndex As String
Dim sEndIndex As String
Dim i As Number
'輸入WaferId 為01,02,03,04.....
'把 WaferID 的重排列過,若WafeID為 01,02,轉換為 1,2
aWaferID = Split({csfr300.msg}, ",")
For i = 1 To UBound(aWaferID)
If sWaferID = "" Then
if CDbl(aWaferID(i)) < 10 then
sWaferID = Right(aWaferID(i),1)
Else
sWaferID = aWaferID(i)
End If
Else
if CDbl(aWaferID(i)) < 10 then
sWaferID = sWaferID & "," & Right(aWaferID(i),1)
Else
sWaferID = sWaferID & "," & aWaferID(i)
End If
End If
Next i
'開始 WaferID 縮寫作業
sTemp = ""
sWaferIDOutput = ""
sStartIndex = ""
sEndIndex = ""
aWaferID = Split(sWaferID,",")
For i = 1 To UBound(aWaferID)
sCurr = aWaferID(i)
sEndIndex = aWaferID(i)
If sStartIndex = "" Then
sStartIndex = aWaferID(i)
End If
If sTemp = "" Then
sTemp = aWaferID(i)
sPre = aWaferID(i)
Else
If CDbl(sCurr) - CDbl(sPre) = 1 Then
If CDbl(sEndIndex) - CDbl(sStartIndex) = 1 Then
sTemp = sStartIndex & "," & sEndIndex
Else
sTemp = sStartIndex & "-" & sEndIndex
End If
Else
If sWaferIDOutput = "" Then
sWaferIDOutput = sTemp
Else
sWaferIDOutput = sWaferIDOutput & "," & sTemp
End If
sStartIndex = sCurr
sEndIndex = sCurr
sTemp = sCurr
End If
sPre = aWaferID(i)
End If
Next i
If sWaferIDOutput = "" Then
sWaferIDOutput = sTemp
Else
sWaferIDOutput = sWaferIDOutput & "," & sTemp
End If
'
formula = sWaferIDOutput