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

Lotus notes Lotusscript:将数组转换为字符串的问题,lotus-notes,lotus-domino,lotusscript,Lotus Notes,Lotus Domino,Lotusscript,当我试图将数组转换为逗号分隔的字符串时,出现了一个问题。在下面的示例中,我检索电子邮件中的所有文件,并将它们发送到我的服务器以添加它们。我的服务器向我发回一个存储在阵列中的ID。然后我尝试将这个数组转换成字符串 Dim filesId(1 To 100) As String Dim tmpString As String Dim count As Integer count = 0 Set db = Session.Currentdatabase

当我试图将数组转换为逗号分隔的字符串时,出现了一个问题。在下面的示例中,我检索电子邮件中的所有文件,并将它们发送到我的服务器以添加它们。我的服务器向我发回一个存储在阵列中的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
Dim filesId(1到100)作为字符串
将tmpString设置为字符串
将计数设置为整数
计数=0
Set db=Session.Currentdatabase
设置CurrentDocColl=db.未处理的文档
Set doc=CurrentDocColl.Getfirstdocument
而不是医生什么都不是
Set item=doc.GETFIRSTITEM(“正文”)
如果是doc.has,那么
for item.EmbeddedObjects中的所有附件
jsonBody=“value={”“filename”“:”“+attachment.Name+”“}”
Set http=session.CreateHTTPRequest()
http.preferstrings=True
调用http.SetHeaderField(“ContentType”、“application/json”)
ret=http.Post(url,jsonBody)
如果是数字(ret),则
计数=计数+1
fileId(count)=ret
其他的
MessageBox-ret
如果结束
端孔
如果结束
Set doc=CurrentDocColl.Getnextdocument(doc)
温德
ForAll FILEID中的itemValue
如果CStr(itemValue)“,则
如果tmpString=“”,则
tmpString=itemValue
其他的
tmpString=tmpString&“,”和itemValue
如果结束
如果结束
端孔
MessageBox tmpString
问题是最后一个字符串只包含数组的第一个值,而不包含下一个值

此数组的示例:[3567356835693570]

所需结果字符串:3567356835693570

收到的结果:3567

我不明白这个问题是从哪里来的,特别是因为它也不适用于Join()和introde()函数


编辑

事实上,在调试器中查看之后,我们可以看到数组中存在我的数据,但格式是特定的,因为字符串的引号不闭合。我能做些什么来解决这个问题


非常感谢您的帮助

我看不出tmpString有什么不好的说法。如果没有dim,则它是一个变体。如果它是一个变量,那么您的赋值
tmpString=item
将动态地将tmpString定义为数字类型。这将导致您的作业失败。由于您似乎需要ret的数字数据,并且正在将其分配到filesId数组中,并且项是filesId中的值,因此您需要在两个分配中使用CStr(项)。

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

您的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 )

由于我不知道您的字符串中有哪一个换行符/回车符,我将上面代码中最常见的三个换行符替换为空白。。。可能是其中另一个无法打印的字符,您必须清除它,然后您需要检查
右侧(ret,1)
并检查其中的内容并替换它。

您的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 )

由于我不知道您的字符串中有哪一个换行符/回车符,我将上面代码中最常见的三个换行符替换为空白。。。可能是其中的另一个无法打印的字符,您必须清除它,然后您需要检查
Right(ret,1)
并检查其中的内容并替换它。

数字数据似乎不太可能是问题,因为
fileid
数组被声明为字符串,这意味着
ForAll
循环中的
item
应该始终是字符串。不过,除了调试,我没有其他想法。谢谢你的回答,我编辑了我的代码以使它更清晰。我的变量tmpString是String类型,因此我认为这不是问题所在。数字数据似乎不太可能是问题,因为
fileid
数组被声明为字符串,这意味着
ForAll
循环中的
item
应该始终是字符串。不过,除了调试,我没有其他想法。谢谢你的回答,我编辑了我的代码以使它更清晰。我的变量tmpString是String类型,因此我认为这不是问题所在。在尝试将其转换为字符串之前,您是否确定
fileid
数组确实包含这些值?我建议使用LotusScript调试器来确认这一点。如果
Join
功能也不起作用,则强烈建议您的数组不包含您认为它所包含的内容。请提供wo