加入空字符串数组
Join Array of strings except empty
我试图找到一种简单的方法来连接数组中的字符串 - 但前提是它们不为空。
示例:
Dim strArr(3)
strArr(0) = "This"
strArr(1) = "is"
strArr(2) = ""
strArr(3) = "a"
strArr(4) = "test"
strResult = Join(strArr, "***")
MsgBox strResult
将生成以下文本:This***is******a***test
但应该是:This***is***a***test
所以应该忽略空字符串。
下一个代码片段可能会有所帮助(甚至 ReDim
是 strArr
):
option explicit
Dim strArr, strResult, strJoinString
ReDim strArr(4)
strArr(0) = "This"
strArr(1) = "is"
strArr(2) = ""
strArr(3) = "a"
strArr(4) = "test"
strJoinString = "€€€"
strResult = Join(strArr, strJoinString)
Do While Instr(1, strResult, strJoinString & strJoinString, vbBinaryCompare) > 0
strResult = Replace( strResult, strJoinString & strJoinString, strJoinString)
Loop
strArr = Split(strResult, strJoinString)
strResult = Join(strArr, "***")
MsgBox strResult & vbNewLine & Join(strArr, "-")
确保strJoinString
不匹配任何数组元素!
Option Explicit
Dim aStrArray
aStrArray = Array("", "", "This", "", "", "is", "", "", "", "a", "test", "", "")
Dim strResult
strResult = MyJoin(aStrArray, "***")
WScript.Echo strResult
Function MyJoin( inputArray, inputDelimiter )
Dim delimiter
delimiter = Chr(1) & Chr(2)
With New RegExp
.Pattern = "^(?:" & delimiter & ")+" & _
"|(?:" & delimiter & ")+$" & _
"|(?:" & delimiter & ")+(" & delimiter & ")"
.Global = True
MyJoin = Replace(.Replace(Join(inputArray, delimiter), ""), delimiter, inputDelimiter)
End With
End Function
您可以将多次出现的定界符替换为一个。
在示例代码的函数中:
- 定义了一个分隔符,用于连接输入数组中的所有元素。创建它是为了降低在数据中找到它的可能性。
- 创建了一个正则表达式来处理分隔符的初始、结束和重复出现。
- 使用生成的分隔符连接输入数组
- 正则表达式用于删除不需要的分隔符序列
- 生成的分隔符替换为输入分隔符
一种方法是将所有非空字段复制到字典中,然后加入该字典的值:
Set d = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(strArr)
If strArr(i) <> "" Then d.Add i, strArr(i)
Next
WScript.Echo Join(d.Items, "***")
我试图找到一种简单的方法来连接数组中的字符串 - 但前提是它们不为空。
示例:
Dim strArr(3)
strArr(0) = "This"
strArr(1) = "is"
strArr(2) = ""
strArr(3) = "a"
strArr(4) = "test"
strResult = Join(strArr, "***")
MsgBox strResult
将生成以下文本:This***is******a***test
但应该是:This***is***a***test
所以应该忽略空字符串。
下一个代码片段可能会有所帮助(甚至 ReDim
是 strArr
):
option explicit
Dim strArr, strResult, strJoinString
ReDim strArr(4)
strArr(0) = "This"
strArr(1) = "is"
strArr(2) = ""
strArr(3) = "a"
strArr(4) = "test"
strJoinString = "€€€"
strResult = Join(strArr, strJoinString)
Do While Instr(1, strResult, strJoinString & strJoinString, vbBinaryCompare) > 0
strResult = Replace( strResult, strJoinString & strJoinString, strJoinString)
Loop
strArr = Split(strResult, strJoinString)
strResult = Join(strArr, "***")
MsgBox strResult & vbNewLine & Join(strArr, "-")
确保strJoinString
不匹配任何数组元素!
Option Explicit
Dim aStrArray
aStrArray = Array("", "", "This", "", "", "is", "", "", "", "a", "test", "", "")
Dim strResult
strResult = MyJoin(aStrArray, "***")
WScript.Echo strResult
Function MyJoin( inputArray, inputDelimiter )
Dim delimiter
delimiter = Chr(1) & Chr(2)
With New RegExp
.Pattern = "^(?:" & delimiter & ")+" & _
"|(?:" & delimiter & ")+$" & _
"|(?:" & delimiter & ")+(" & delimiter & ")"
.Global = True
MyJoin = Replace(.Replace(Join(inputArray, delimiter), ""), delimiter, inputDelimiter)
End With
End Function
您可以将多次出现的定界符替换为一个。
在示例代码的函数中:
- 定义了一个分隔符,用于连接输入数组中的所有元素。创建它是为了降低在数据中找到它的可能性。
- 创建了一个正则表达式来处理分隔符的初始、结束和重复出现。
- 使用生成的分隔符连接输入数组
- 正则表达式用于删除不需要的分隔符序列
- 生成的分隔符替换为输入分隔符
一种方法是将所有非空字段复制到字典中,然后加入该字典的值:
Set d = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(strArr)
If strArr(i) <> "" Then d.Add i, strArr(i)
Next
WScript.Echo Join(d.Items, "***")