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