问题描述
当我尝试将数组转换为逗号分隔的字符串时遇到问题。在下面的示例中,我检索电子邮件中的所有文件并将它们发送到我的服务器以添加它们。我的服务器向我发送回存储在数组中的 ID。然后我尝试将此数组转换为字符串。
Dim filesId(1 To 100) As String
Dim tmpString As String
Dim count As Integer
count = 0
Set db = Session.Currentdatabase
Set CurrentDocColl = db.Unprocesseddocuments
Set doc = CurrentDocColl.Getfirstdocument
While Not doc Is nothing
Set item = doc.GETFirsTITEM("Body")
If doc.HasEmbedded Then
ForAll attachment In item.Embeddedobjects
jsonBody="value={""filename"":"""+attachment.Name+"""}"
Set http=session.CreateHTTPRequest()
http.preferstrings = True
Call http.SetHeaderField("ContentType","application/json")
ret = http.Post(url,jsonBody)
If IsNumeric(ret) Then
count = count + 1
filesId(count) = ret
Else
MessageBox ret
End If
End ForAll
End If
Set doc=CurrentDocColl.Getnextdocument(doc)
Wend
ForAll itemValue In filesId
If CStr(itemValue ) <> "" Then
If tmpString = "" Then
tmpString = itemValue
Else
tmpString = tmpString & "," & itemValue
End If
End If
End ForAll
MessageBox tmpString
问题在于最终的 String 只包含数组的第一个值,而不包含下一个值。
此数组的示例: [3567,3568,3569,3570]
所需结果字符串: 3567,3570
收到的结果: 3567
我不明白这个问题从何而来,特别是因为它也不适用于 Join() 和 Implode() 函数。
编辑
事实上,在查看调试器后,我们可以看到我的数据存在于数组中,但采用特定格式,因为字符串的引号没有关闭。我该怎么做才能解决这个问题?
非常感谢您的帮助
解决方法
您的 http 帖子结果在其末尾包含换行符。这就是字符串在调试器中看起来如此“奇怪”的原因。这导致以下 tmpString:
"3267
,3268
,3269
,3270"
Messagebox 无法显示所有换行符...所以它只显示字符串直到第一个换行符。
您需要在连接之前从字符串中删除换行符:
Dim badChars(2) as String
Dim goodChars(2) as String
badChars(0) = Chr$(0)
badChars(1) = Chr$(10)
badChars(2) = Chr$(13)
...
filesId(count) = Replace( ret,badChars,goodChars )
因为我不知道你的字符串中有哪个换行符/回车符,所以我用上面代码中的空白替换了三个最常见的字符......可能是另一个不可打印的字符,你必须摆脱,然后您需要检查 Right( ret,1)
并检查里面有什么并替换它。
我没有看到 tmpString 的暗淡语句。如果没有dim,那么它就是一个变体。如果它是一个变体,那么您的赋值 tmpString = item
正在动态地将 tmpString 定义为数字类型。这会导致您的分配 tmpString = tmpString & "," & item
失败。由于您似乎期待 ret 的数字数据,并且您将其分配到 filesId 数组中,并且 item 是来自 filesId 的值,因此您需要在两个分配中使用 CStr(item)。