2017-06-21 147 views
0

希望有人能幫助我弄清楚這一點。從vb.net的字符串解析電子郵件地址

我已經獲得了從交換機導出的分發列表的導出負載。

的出口是這樣的...... enter image description here

我正在寫一個小程序來解析這些吐出可傾倒直入交換外殼重新創建列表的腳本。

到目前爲止,我已經閱讀了輸出,並逐行循環閱讀。

我想要做的是在行中找到@符號的位置,然後抓住它之前的所有內容,直到遇到空間,並且之後的所有內容直到遇到空間。

我已經在excel中完成了一百萬次這樣的事情,但是從來沒有在vb.net中做過,我不知道如何實現它。

對不起,如果這看起來像一個愚蠢的問題;他們只是容易,如果你知道答案:)

到目前爲止,我有這個(感謝Pikoh!)...

If System.IO.File.Exists(strFileName) = True Then 

    Dim objReader As New System.IO.StreamReader(strFileName) 

    Do While objReader.Peek() <> -1 

     TextLine = TextLine & objReader.ReadLine() & vbNewLine 

    Loop 

    output.Text = TextLine 


    For Each line As String In output.Text.Split(vbLf) 
     Try 
      Dim testStrings As String() = New String() {line} 
      Dim stringSeparators() As String = {" ", "\t"} 
      Dim email1 = testStrings(0).Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)(1) 
      Dim email2 = testStrings(0).Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)(1) 


      MessageBox.Show(email1 & "|" & email2) 
     Catch ex As Exception 
      MessageBox.Show("Nothing :(") 
     End Try 


    Next 

End If 
+1

['IndexOf'](https://msdn.microsoft.com/en-us/library/k8b1470s(V = vs.110)的.aspx)? – Pikoh

+0

謝謝@ Pikoh ...我可以用它來找到'@'的位置......然後我如何找到相對於'@'的左右空格? – John

+1

使用'Split'查看我的答案。 – Pikoh

回答

1

對於簡單的情況就是這樣,我最簡單的方法認爲只是使用Split。由於我不知道2列之間有什麼,所以我要定義2個分隔符:空格和製表符:

Dim testStrings As String() = New String() {"test  [email protected]", "test2" & vbTab & "[email protected]"} 
Dim stringSeparators() As String = {" ", vbTab} 
Dim email1 = testStrings(0).Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries).Last() 
Dim email2 = testStrings(0).Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries).Last() 
0

您仍然可以以相同的方式執行此操作。事實上,你的VBA代碼可能在VB.NET中有效。

隨着測試文件:

Name      PrimarySmtpAddress 
----      ------------------ 
_Sys.User     [email protected]  
Joe Bloggs    [email protected] 
Bill Gates    [email protected] 
J. Someone Else    [email protected] 
Matt "[email protected]" Pain   [email protected] 

和代碼

Option Infer On 
Option Strict On 

Imports System.IO 

Module Module1 

    Function ExtractEmailAddress(s As String) As String 
     Dim atPos = s.LastIndexOf("@"c) 
     If atPos < 0 Then 
      Return String.Empty 
     End If 

     Dim firstPos = atPos + 1 
     Dim lastPos = atPos - 1 

     Do 
      firstPos -= 1 
     Loop Until firstPos = 0 OrElse String.IsNullOrWhiteSpace(s.Chars(firstPos)) 

     Do 
      lastPos += 1 
     Loop Until lastPos = s.Length OrElse String.IsNullOrWhiteSpace(s.Chars(lastPos)) 

     Return s.Substring(firstPos + 1, lastPos - firstPos - 1) 

    End Function 

    Sub Main() 
     Using sr As New StreamReader("C:\temp\ExampleOutput.txt") 
      While Not sr.EndOfStream 
       Dim line = sr.ReadLine() 
       Dim email = ExtractEmailAddress(line) 
       If email.Length > 0 Then 
        Console.WriteLine(email) 
       End If 

      End While 
     End Using 

     Console.ReadLine() 

    End Sub 

End Module 

輸出爲:

[email protected]
joe.bloggs @ domain.com
[email protected]
[email protected]
[email protected]

相關問題