【发布时间】:2020-06-24 21:03:25
【问题描述】:
我正在尝试使用 InStr 在数组中查找值。但是,我得到了误报和误报。
即将有一个字符串匹配,即使字符串完全匹配,也不会报告匹配或不报告匹配。
它需要 Outlook。它将突出显示的电子邮件转换为放置在指定路径中的文本文件。然后,它通过将文本读入数组并搜索数组内容来搜索文本文件中的分隔符。但是,如前所述,即使子字符串在数组中,InStr 也会返回误报和误报。我尝试过二进制和文本比较方法以及各种比较字符串。
有什么想法吗?
注意:1) 在对 InStr 感到沮丧之后,我尝试使用 if then 语句将数组与分隔符字符串进行比较,这就是我的代码最后几行中显示的内容。 2)我已将分隔符设置为“xxxxx”,您可以在 objfile.write 命令集之后的行中看到它。 3)我尝试过使用instr函数同时使用文本和二进制比较模式
3) 终极目标: a) 从 Outlook 中提取突出显示的电子邮件并合并到一个文本文件中。 b)根据邮件文本对分隔的文本文件进行排序(如果分隔符之间的文本包含y,则放入数组y,如果x...等) c) 以我指定的顺序(例如 x、y、z)将数组打印到电子邮件中
这是因为电子邮件每天在不同的时间到达,但必须每天按相同的顺序组织最终的摘要电子邮件。
谢谢。
下面是我的代码:
Sub MergeTextFromSelectedEmailsIntoTextFile()
Dim objFS As New Scripting.FileSystemObject, objFile As Scripting.TextStream
Dim objItem As Object, strFile As String
Dim wrapArray() As String
If ActiveExplorer.Selection.Count = 0 Then Exit Sub
strFile = InputBox("Please enter the full path and file name for the merged text:" _
, "Enter File Name")
Set objFile = objFS.CreateTextFile(strFile, False)
If objFile Is Nothing Then
MsgBox "Error creating file '" & strFile & "'.", vbOKOnly + vbExclamation _
, "Invalid File"
Exit Sub
End If
For Each objItem In ActiveExplorer.Selection
objFile.Write vbCr
objFile.Write (vbCr & Chr(10) & Chr(13) & ("xxxxx") & Chr(13) & Chr(13) & vbCr & vbLf)
objFile.Write (vbCr & vbLf & objItem.Body)
objFile.Write (vbCr & vbLf & Chr(13))
Next
objFile.Close
'Define variables for writing to array
Dim i As Integer
Set objFile = objFS.OpenTextFile(strFile, ForReading)
'write file contents to array
Do Until objFile.AtEndOfStream
ReDim Preserve wrapArray(i)
wrapArray(i) = objFile.ReadLine
i = i + 1
Loop
Dim xxxxx As String
xxxxx = xxxxx
'check each array index for contents
'note i have tried
''if instr(0, wraparray(i), "xxxxx",0) then msgBox "FoundDelim at line " & i
For i = LBound(wrapArray()) To UBound(wrapArray())
If wrapArray(i) = "xxxxx" Then MsgBox "FoundDelim! at line " & i
Next i
【问题讨论】:
-
我是不是很笨? - 看不到此代码中使用的
InStr? -
另外
xxxxx = xxxxx与xxxxx = "xxxxx"不同。您正在将变量设置为自身,因此它将为空。 -
感谢您指出自我分配错误。然而,这只是我之前尝试比较字符串的实验的残余,并且它没有在损坏的 if-then 语句中使用。另外,我编辑了帖子以使我的总体目标更加清晰。
-
只是一个疯狂的猜测:在调用 instr 函数时,您指定了“二进制比较”(0 作为 arg #4)。因此,您实际上将八位字节与字符进行比较,因此可能会成为不同编码下不同字符表示的牺牲品 - 例如文件内容的 utf-8 和字符串文字的 iso-8859-1 的组合可能会产生误报和误报。根据comment 2 of this post's answer,您可以通过包含仅限 unicode 的字符来强制使用 utf8。
-
我已经完成了文本比较和二进制比较,但都没有工作。上面消息中的内容只是代码的当前版本。如果有人倾向于调整和测试各种解决方案并发布结果,我也会发布我想要的结果。
标签: arrays vba outlook full-text-search false-positive