Vbscript如何从文本末尾找到第一个char

时间:2017-04-28 14:50:56

标签: vbscript

我有问题从文本末尾找到第一个字符。 例如,在“父亲回家”中找到空格(“”)或新行(vbCrLf)我从末尾得到第一个空格的索引,并在“父亲回家/明天”我得到/n.

我的代码:

Function checkTextFunction( i_valueCheck)
    Dim whereSpace
    Dim WhereNewLine
    Dim indexOFirstSpaceFromTheEnd
    If Right(i_valueCheck,1) = " " Or Right(i_valueCheck,1) = vbCrLf Then
        indexOFirstSpaceFromTheEnd = -1
    Else
        whereSpace = InStrRev(i_valueCheck, " ", -1,0)
        WhereNewLine = InStrRev(i_valueCheck, vbCrLf, -1,0)
        If whereSpace < WhereNewLine Then 
            indexOFirstSpaceFromTheEnd = whereSpace
        Else
            indexOFirstSpaceFromTheEnd = WhereNewLine
        End If
    End IF
    WriteLogFileLine "indexOFirstSpaceFromTheEnd: " & indexOFirstSpaceFromTheEnd & " Right(i_valueCheck,1): " & Right(i_valueCheck,1) & vbCrLf & vbCrLf
    checkTextFunction = indexOFirstSpaceFromTheEnd
End Function

但我找不到第一次出现的行

    whereSpace = InStrRev(i_valueCheck, " ", 1)
    WhereNewLine = InStrRev(i_valueCheck, vbCrLf,1)

我总是0。

有人有想法吗?

*******我编辑我的问题!!!!。

谢谢,

塔尔

2 个答案:

答案 0 :(得分:0)

  1. vbCrLf实际上是2个字符,因此您要指定Right(i_valueCheck, 2) = vbCrLf
  2. 如果字符不在字符串中,则InStrRev将返回0 ..这意味着它始终是第一次出现。根据变量的值,第二个If语句应该更加明确。
  3. 由于您没有初始化indexOFirstSpaceFromTheEnd ...如果没有vbCrLf或“”字符,它将保持为空。因此,您应该添加一个检查,以便每次都返回一个值...无论字符串如何。我随意挑选了一百万。
  4. Function checkTextFunction(ByRef i_valueCheck)
        Dim whereSpace
        Dim whereNewLine
        Dim indexOFirstSpaceFromTheEnd
    
        If Right(i_valueCheck,1) = " " Or Right(i_valueCheck,2) = vbCrLf Then
            indexOFirstSpaceFromTheEnd = -1
        Else
            whereSpace = InStrRev(i_valueCheck, " ", -1, 0)
            whereNewLine = InStrRev(i_valueCheck, vbCrLf, -1, 0)
    
            If whereSpace > 0 And (whereSpace < whereNewLine Or whereNewLine = 0) Then 
                indexOFirstSpaceFromTheEnd = whereSpace
            ElseIf whereNewLine > 0 And (whereNewLine < whereSpace Or whereSpace = 0) Then
                indexOFirstSpaceFromTheEnd = whereNewLine
            End If
        End If
    
        If indexOFirstSpaceFromTheEnd = vbEmpty Then indexOFirstSpaceFromTheEnd = 1000000
    
        WriteLogFileLine "indexOFirstSpaceFromTheEnd: " & _ 
                          indexOFirstSpaceFromTheEnd    & _
                          " Right(i_valueCheck,1): "    & _ 
                            Right(i_valueCheck,1)       & vbCrLf & vbCrLf
    
        checkTextFunction = indexOFirstSpaceFromTheEnd
    End Function
    

    这应该可以帮助你开始...现实地 - 如果你想找到第一次出现的vbCrLf或“”那么你将不得不操作While循环以便继续检查(与InStrRev)索引实际上最后一次出现。

    例如:使用上面的代码...查看checkTextFunction(Space(2) & "test")

    的输出

答案 1 :(得分:0)

最后的答案:如果&#34; i_valueCheck&#34;不是空格或vbCrLf它从&#34; i_valueCheck&#34;的末尾找到第一个案例(空格或vbCrLf)。

    Function checkTextFunction( i_valueCheck)
        Dim whereSpace
        Dim whereNewLine
        Dim indexOFirstSpaceFromTheEnd
        If Right(i_valueCheck,1) = " " Or Right(i_valueCheck,2) = vbCrLf Then
            indexOFirstSpaceFromTheEnd = -1
        Else
            whereSpace = InStrRev(i_valueCheck, " ", -1, 0)
            whereNewLine = InStrRev(i_valueCheck, vbCrLf, -1, 0)

            If whereSpace > 0 And (whereSpace > whereNewLine Or whereNewLine = 0) Then 
                indexOFirstSpaceFromTheEnd = whereSpace
            ElseIf whereNewLine > 0 And (whereNewLine > whereSpace Or whereSpace = 0) Then
                indexOFirstSpaceFromTheEnd = whereNewLine       
            Else                                   
                indexOFirstSpaceFromTheEnd = -1
            End If
        End If                                              
        checkTextFunction = indexOFirstSpaceFromTheEnd End Function