JohnK 发表于 2006-5-5 18:24:04

基于特定顺序对字符串进行排序

很抱歉,如果已经这样做了,但我找不到它。
我正在尝试做的是根据设置的顺序对字符串进行排序。我正在做的是为电槽中的内容对行“文本”值进行排序。该例程使用交叉窗口抓取所有行,过滤层名称,并根据找到的层创建一串字母。问题是字符串是基于创建的顺序。我的字符串字母是P(主管道)、S(辅助)、L(照明电路)和CATV的X。根据创建顺序,典型的字符串可能看起来像PSSXPLPS。我正在尝试将其排序为看起来像PPPSSSLX。我正在尝试使用INSTR、MID、LEFT和右侧来操作我的字符串。
我的想法是使用while语句(或do while)检查“P”是否为INSTR,并使用返回的位置为MID函数提供信息以提取字母并创建一个我将附加每个字母的新字符串。然后使用左和右将字符串连接在一起减去我们刚刚删除的“P”。然后是S、L和X。
**** Hidden Message *****

Jeff_M 发表于 2006-5-5 18:24:24

哼....

Jeff_M 发表于 2006-5-5 18:28:26

更好的是:
Function testCmdrDuh(str2test As String, strPattern As String) As String
Dim strFinal As String
Dim I As Integer
Dim strPat As String
Do Until strPattern = ""
    strPat = Left(strPattern, 1)
    I = InStr(1, str2test, strPat)
    Do Until I = 0
      strFinal = strFinal & Mid(str2test, I, 1)
      str2test = Replace(str2test, strPat, "", 1, 1)
      I = InStr(1, str2test, strPat)
    Loop
    strPattern = Replace(strPattern, strPat, "", 1, 1)
Loop
testCmdrDuh = strFinal
End Function
Sub test()
Debug.Print testCmdrDuh("PSSXPLPS", "PSLX")
End Sub

Dnereb 发表于 2006-5-5 19:13:38

解决这个问题的另一种方法。
'variation that preserves the rough data in str2test an uses 1 loop only per pattern
'thus speed things up for larger amounts of data.
Function testCmdrDuh(ByVal str2test As String, ByVal strPattern As String) As String
Dim strFinal As String
Dim PatternCounter As Long
Dim PatternCharNum As Long
Dim strPat As String
PatternCounter = 1
For PatternCounter = 1 To Len(strPattern)
    strPat = Mid$(strPattern, PatternCounter, 1)
    PatternCharNum = Len(str2test)
    str2test = Replace(str2test, strPat, "")
    strFinal = strFinal & String$(PatternCharNum - Len(str2test), strPat)
Next
testCmdrDuh = strFinal
End Function
Sub test()
Debug.Print testCmdrDuh("PSSXPLPS", "PSLX")
End Sub

Dnereb 发表于 2006-5-5 20:22:59

谢谢伙计们。我不知道替换功能。更多的阅读要做。
页: [1]
查看完整版本: 基于特定顺序对字符串进行排序