希望有人可以帮我解决这个问题。
我已经从交换中导出了大量的分发列表导出。
我正在编写一个小应用程序来解析这些并吐出一个脚本,可以将其直接转储到交换shell中以重新创建列表。
到目前为止,我已经阅读了输出并逐行循环播放。
我想要做的是找到行中@符号的位置然后抓住它前面的所有内容,直到遇到一个空格,然后一切都在它之后,直到遇到一个空格。
我已经在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
答案 0 :(得分:1)
在这种简单的情况下,我认为最简单的方法就是使用Split
。由于我不知道2列之间的内容,我将定义2个分隔符:空格和制表符:
Dim testStrings As String() = New String() {"test test@domain.com", "test2" & vbTab & "test2@domain.com"}
Dim stringSeparators() As String = {" ", vbTab}
Dim email1 = testStrings(0).Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries).Last()
Dim email2 = testStrings(0).Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries).Last()
答案 1 :(得分:0)
你仍然可以用同样的方式做到这一点。实际上,您的VBA代码可能在VB.NET中有效。
使用以下测试文件:
Name PrimarySmtpAddress
---- ------------------
_Sys.User sys.user@domain.com
Joe Bloggs joe.bloggs@domain.com
Bill Gates bill.gates@domain.com
J. Someone Else someone.else@domain.com
Matt "M@tty" Pain matt@example.com
和代码
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
输出是:
sys.user@domain.com
joe.bloggs@domain.com
bill.gates@domain.com
someone.else@domain.com
matt@example.com