Lotusscript:将数组转换为字符串的问题

Lotusscript: Problem to convert an Array into a String

当我尝试将数组转换为逗号分隔的字符串时遇到问题。在下面的示例中,我检索了电子邮件中的所有文件并将它们发送到我的服务器以添加它们。我的服务器发回一个存储在数组中的 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

问题是最终的字符串只包含数组的第一个值而不包含下一个值。

Example with this Array: [3567,3568,3569,3570]

Desired result String: 3567,3568,3569,3570

Result received: 3567

我不明白这个问题从何而来,尤其是因为它也不适用于 Join() 和 Iplode() 函数。


编辑

确实,在查看调试器后,我们可以看到我的数据存在于数组中,但采用特定格式,因为字符串的引号没有关闭。我该怎么做才能解决这个问题?

非常感谢您的帮助

我没有看到 tmpString 的模糊语句。如果没有 dim,则它是一个变体。如果它是变体,那么您的赋值 tmpString = item 是动态地将 tmpString 定义为数字类型。那会导致您的作业 tmpString = tmpString & "," & item 失败。由于您似乎期待 ret 的数字数据,并且您正在将其分配到 filesId 数组中,而 item 是来自 filesId 的值,因此您需要在两个分配中都使用 CStr(item)。

您的 http post 结果在末尾包含换行符。这就是字符串在调试器中看起来如此“奇怪”的原因。这导致以下 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 )

因为我不知道你的字符串中有哪个换行符/回车 return 我在上面的代码中用空白替换了三个最常见的...可能是你有的另一个不可打印的字符要摆脱,那么您需要检查 Right( ret , 1) 并检查其中的内容并替换它。