VBScript - 用 2 个目标字符拆分一个字符串,将它们转换为复合数组,然后从数组中删除那些不需要的

VBScript - Spliting a String with 2 target chars, turning them in composite Array and then removing those unnecessary from the array

我有一个问题可能简单也可能不简单。

我会进一步解释:我有这样一个字符串:

str = "TR~Maintenance~fas plus-maintenicon|GR~Supplies~fas minus-suppicon|JK~Affidavit~fas minus-affiicon"

现在,我的 objective 是将它们分别放在一个数组中,例如:

TR
Maintenance
fas plus-maintenicon
GR
Supplies
fas minus-suppicon
JK
Affidavit
fas minus-affiicon

然后重塑和重新调整数组以仅保留以 fas 开头的字符串....

最简单的方法是什么?分裂?正则表达式? inStr?

我有以下代码:

Function funcSeparaLista(objLst)
    arrVLst = split(objLst, "~")
    
    for each x in arrVLst
        VLst = VLst&x&"<br/>"
    next
        
    funcSeparaLista = split(VLst, "|")
end function

t = funcSeparaLista(str)

但检索数据使用:

response.write(t(0))
response.write(t(1))
response.write(t(2))
response.write(t(3))

我得到了不想要的结果:

TR
Maintenance
fas plus-mainteniconGR
Supplies
fas minus-suppiconJK
Affidavit
fas minus-affiicon

最重要的一件事:我希望我的 FUNCTION 只处理将分离的字符串放入数组并在另一部分代码中处理它。

在数组像我想要的那样保存所有内容后,我只希望数组保留这些数据:

fas plus-maintenicon
fas minus-suppicon
fas minus-affiicon

我做错了什么?请记住。这是 vbscript,不是 VB.Net。 在此先感谢我认为这可能非常容易,但我并没有在重做和检查代码几个小时后尝试完成它。

这是一个序列化字符串,记录分隔符为|,字段分隔符为~。您可以使用双循环从中轻松构建二维数组。

Dim str: str = "TR~Maintenance~fas plus-maintenicon|GR~Supplies~fas minus-suppicon|JK~Affidavit~fas minus-affiicon"

Dim data: data = ConvertToArray(str, "|", "~")
WScript.Echo data(1, 2)

Function ConvertToArray(value, record_delim, field_delim)
    Dim data()
    If Len(value) < 1 Then ConvertToArray = Empty
    Dim records: records = Split(value, record_delim)
    If Not IsArray(records) Then ConvertToArray = Empty
    Dim rows: rows = UBound(records)
    Dim row, col
    For row = 0 To rows
        Dim fields: fields = Split(records(row), field_delim)
        If Not IsArray(fields) Then ConvertToArray = Empty
        Dim cols: cols = UBound(fields)
        ReDim Preserve data(cols, row)
        For col = 0 To cols
            data(col, row) = fields(col)
        Next
    Next
    ConvertToArray = data
End Function

输出:

Affidavit

使用此函数,您可以通过循环并仅返回每行的第 3 列来获得所需的输出。

Dim data: data = ConvertToArray(str, "|", "~")
If IsArray(data) Then
    Dim row
    Dim rows: rows = UBound(data, 2)
    For row = 0 To rows
        WScript.Echo data(2, row)
    Next
End If

输出:

fas plus-maintenicon
fas minus-suppicon
fas minus-affiicon