整個重新改寫(大幅依賴
VB 的 Split)
(用別人的想法來 改寫 對偶還真是不那麼容易!!)
(對了,版主您原先寫的參數
ByVal TextTemp, ByVal NOStringIs
==> 應該可以改成 ByVal TextTemp AS String, ByVal NOStringIs as string)
(ㄟ,不宣告會變成 Variant 型別,會比較佔記憶體,小弟怕怕!!
)
不過小弟
(1)把 您 原先第三個參數傳入 0 的部份 全部都改成 + 1
(與事實一致 (EX:第 1 個,而不會有第 0 個),而不採 以 0 為底的 算法)
(若是傳入0 OR 根本沒傳值的話,預設為1)
(2)至於 最後一個置換的範例 ,小弟倒是加強了
(1)現在 應該是沒限制
(2)直接就可以傳回全部的字串,不用再由 程式設計師 組合了
(3)取消了 連續取的模式(找下一個)
(4)增加了許多參數(還沒仔細試每一種組合的結果,是否會影響 結果,至少目前還沒測到問題)
(PS :
(1)其中 參數五 算是最特殊的 模式,只有自己的功效,目前無法混合其它參數的功效,且優先順序 > 其它 參數 )
(2) 參數七 目前還沒有實質作用 (因為要改到可用有點複雜)
參數七 的用意是為了 若是 參數二 的內容若含英文字,是否完全符合大小寫才算一致)
(5)突然想到
因為 是 (大幅依賴
VB 的 Split) ,若是這個 Functoin 要在沒有 Split Function 的程式語言 中 改寫的話, 那就
範例:
? JetGetStr_Split("c:\abc\temp\test.txt", "\",1 , , ,True )
test.txt
? JetGetStr_Split("c:\abc\temp\test.txt", "\",2 , ,,True )
c:\abc\temp\
? JetGetStr_Split("test.txt", ".", 1,,,True )
txt
? JetGetStr_Split("test.exe 11,22,33", ",", 1)
test.exe 11
? JetGetStr_Split("test.exe 11,22,33", ",", 2)
22
? JetGetStr_Split("test.exe 11,22,33", ",", 3)
33
'strText = "a,b,c,d,e"
'strTemp = StringSplit_Str(strText, ",", 0)
'strTemp = StringSplit_Str(strText, ",")
'strTemp = StringSplit_Str(strText, ",")
'strTemp = StringSplit_Str(strText, ",")
'strTemp = StringSplit_Str(strText, ",")
'則strTemp依序得到 "a" "b" "c" "d" "e"
? JetGetStr_Split("a,b,c,d,e", ",", 1)
? JetGetStr_Split("a,b,c,d,e", ",", 2)
? JetGetStr_Split("a,b,c,d,e", ",", 3)
? JetGetStr_Split("a,b,c,d,e", ",", 4)
? JetGetStr_Split("a,b,c,d,e", ",", 5)
分別可得到 "a" , "b" ,"c" ,"d" ,"e"
不過沒有喪失了那種找下一筆的功能就是了
II = 1
Do
strTemp = JetGetStr_Split(strText, LEND, II)
ListBox1.AddItem strTemp
II = II + 1
Loop Until strTemp = ""
<字串替換>
? JetGetStr_Split("第一行" + LEND + "第二行" + LEND + "第三行", LEND$,2,"second line")
第一行
second line
第三行
Public Function JetGetStr_Split(ByVal JetSource$, Optional ByVal JetStr_Start As String, Optional ByVal JetTimes As Integer, Optional ByVal JetStr_Insert$, Optional ByVal JetTrue_Rev As Boolean, Optional ByVal JetTrue_JustTwo As Boolean, Optional ByVal JetTrue_UCASE As Boolean) As String
' 目的:(1)取得 參數一 字串 中 (正倒數==>參數五) 第 參數三-1 個 參數二 ∼ 第 參數三 個 參數二 中間的字串
' (2)取代 參數一 字串 中 (正倒數==>參數五) 第 參數三-1 個 參數二 ∼ 第 參數三 個 參數二 中間的字串 ==> 用 參數四 取代
' (3)JetTrue_JustTwo 模式 ==> 把 參數一 字串 依 參數二 拆成兩部份
'
' ==========================================================================================================
' 參數一(JetSource$) :待處理的完整字串
' ==========================================================================================================
'【(2)非必要參數】
' 參數二(JetStr_Start) :起始字串
' 參數三(JetTimes) :第 幾 個
' 參數四(JetStr_Insert$) :取代字串 + 啟動 取代模式
' 參數五(JetTrue_Rev) :(是否) 要從倒數
' 參數六(JetTrue_JustTwo):(是否) 採 (二分法) (目錄、檔案名稱特殊分離法)
' 參數七(JetTrue_UCASE) :(是否) 分大小寫
' ==========================================================================================================
Dim JetTemp() As String, II As Integer, JJ As Integer
Dim JetTwo(1 To 2) As String
Dim intK As Integer
If JetSource$ = "" Then Exit Function
If Not JetTrue_UCASE Then
intK = InStr(UCase(JetSource), UCase(JetStr_Start))
Else
intK = InStr(JetSource, JetStr_Start)
End If
If intK = 0 Then Exit Function
If JetTimes = 0 Then JetTimes = 1
If Not JetTrue_JustTwo Then
' If Not JetTrue_UCASE Then
' JetTemp() = Split(UCase(JetSource$), UCase(JetStr_Start))
' Else
JetTemp() = Split(JetSource$, JetStr_Start)
' End If
If Not JetTrue_Rev Then
JJ = JetTimes - 1
Else
JJ = UBound(JetTemp) - JetTimes + 1
End If
If JetTimes > UBound(JetTemp) + 1 Then
JetGetStr_Split = ""
Exit Function
' 分解模式
ElseIf JetStr_Insert$ = "" Then
JetGetStr_Split = JetTemp(JJ)
' 取代模式
Else
For II = LBound(JetTemp) To UBound(JetTemp)
Select Case II
Case JJ
JetGetStr_Split = JetGetStr_Split & JetStr_Insert$ & JetStr_Start
Case UBound(JetTemp)
JetGetStr_Split = JetGetStr_Split & JetTemp(II)
Case Else
JetGetStr_Split = JetGetStr_Split & JetTemp(II) & JetStr_Start
End Select
Next II
End If
Else
If Not JetTrue_UCASE Then
intK = InStrRev(UCase(JetSource), UCase(JetStr_Start))
Else
intK = InStrRev(JetSource, JetStr_Start)
End If
JJ = 1
JetTwo(JJ) = Mid(JetSource, intK + 1)
JetTwo(JJ + 1) = Left(JetSource, intK)
If JetTimes <= JJ + 1 Then
JetGetStr_Split = JetTwo(JetTimes)
End If
End If
End Function