2012-11-05 79 views
1

我想通過使用InStr的值來查看數組。但是,我得到了誤報和誤報。Instr函數的假陽性和假陰性

I.e.會有字符串匹配,即使字符串完全匹配,也不會報告匹配或不報告匹配。

它需要Outlook。它將突出顯示的電子郵件轉換爲放置在指定路徑中的文本文件。然後通過將文本讀入數組並搜索數組內容來搜索文本文件中的分隔符。但是,如前所述,即使子字符串在數組中,InStr也會返回誤報和漏報。我嘗試過二進制和文本比較方法以及各種比較字符串。

任何想法?

注意:1)在對InStr感到沮喪之後,我試圖使用if then語句將數組與比較字符串進行比較,這就是我的代碼的最後一行所顯示的內容。 2)我已經將分隔符設置爲「xxxxx」,您可以在objfile.write命令集之後的行中看到它。 3)我試圖與InStr函數

3)最終目的使用文本和二進制比較模式: 一)提取強調了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 
+1

我是不是啞巴? - 在這段代碼中看不到'InStr'? –

+1

另外'xxxxx = xxxxx'與'xxxxx =「xxxxx」'不一樣。你將變量設置爲自己,所以它是空的。 –

+0

感謝您指出自我分配錯誤。然而,這僅僅是我之前試圖比較字符串的實驗中的一個殘餘,它並沒有在破碎的if-then語句中使用。此外,我編輯了這篇文章,以使我的總體目標更加清晰。 – Info5ek

回答

3

注意InStr返回一個整數,所以測試功能爲布爾應該導致不一致的行爲的結果。試試這個:

If InStr(wrapArray(i),"xxxxx") > 0 Then 
    MsgBox "FoundDelim! at line " & i 
End If 
+0

謝謝,終於解決了它通過使用下面的代碼行: ',對於i = LBOUND(wrapArray())來UBound函數(wraparray()) 如果InStr函數(1,wrapArray(i)中,「 xxx「,vbTextCompare)<> 0 Then MsgBox」FoundDelimiter at line「&i End If Next i' – Info5ek

+1

非常好!如果這回答了您的問題,您可以通過單擊答案文本左側的複選標記將其標記爲答案。通過提供更高的「接受答案」比率,這可以幫助您進行將來的查詢,某些用戶在回答問題之前會檢查這些比例。 –