用VBS返回两个字符之间不同长度的值

Returning Values of Varying Length Between Two Characters with VBS

我正在尝试想出一种从文件标题中提取信息的方法。文件标题的整体命名约定将保持不变,但部分标题的字符长度会有所不同。以下是此类文件标题的两个可能示例:

  1. 012345678-012345-xxxx-yyyyy.txt
  2. 012345678-012345-xxx-yyyyyy.txt

有没有办法从这些文件标题中提取值,以便 return 出现在第二个和第三个连字符之间的任何内容?使用上面的例子会 return:

  1. xxxx
  2. xxx

此外,是否可以提取最后一个连字符和句点之间的值?使用上面的示例,它将 return:

  1. yyyyy
  2. yyyyyy

当字符长度固定时提取值是微不足道的,但我不知道当字符长度不同时是否可以进行类似的提取。我通常会使用类似这样的东西从 fixed-length 命名约定中提取信息,但不知道如何使它适应字符长度变化的东西。例如,下面的代码片段是一个提取文件标题中前九个字符的函数(在本例中它将提取“012”)。

Function getthething(foo)
getthething = Mid(foo,1,3)
End Function

任何指导将不胜感激。谢谢。

您可以使用 Split 函数完成所有这些操作。这是一个简化事情的包装函数:

Function GetField(p_sText, p_sDelimiter, p_iIndex)

    Dim arrFields
    
    arrFields = Split(p_sText, p_sDelimiter)
    
    If UBound(arrFields) >= (p_iIndex - 1) Then
        GetField = arrFields(p_iIndex - 1)
    Else
        GetField = ""
    End If

End Function

您可以像这样使用此功能:

Dim sFileName
Dim sYs

sFileName = GetField("012345678-012345-xxxx-yyyyy.txt", ".", 1)
sYs = GetField(sFileName, "-", 4)

MsgBox sYs

或者简单地说:

MsgBox GetField(GetField("012345678-012345-xxxx-yyyyy.txt", ".", 1), "-", 4)