我使用 Mailkit,它具有獲取我電子郵件正文文本的功能GetMessage().Textbody
,我想獲取包含特定字串的電子郵件正文的特定行
例如:
12313香蕉奶昔 12356 巧克力奶昔 獼猴桃奶昔 1231313
并繼續......
我想從 700 行電子郵件正文中僅獲取 2 行包含單詞“kiwi”和“choco”
Using reader As New StreamReader("mail.txt")
While Not reader.EndOfStream
Dim line As String = reader.ReadLine()
If line.Contains("kiwi" or "choco") Then
Console.WriteLine(line)
Exit While
End If
End While
End Using
我一直在嘗試找到一種更好更快的方法,而不是將字串保存到檔案然后使用它
uj5u.com熱心網友回復:
你不能or像這樣在函式呼叫中使用;你需要兩個單獨的Contains()電話。此外,這可以更短:
Dim lines = File.ReadLines("mail.txt").
Where(Function(line) line.Contains("kiwi") OrElse line.Contains("choco"))
For Each line As String In lines
Console.WriteLine(line)
Next
但這仍然假設mail.txt檔案。給定一個字串,Textbody我們可以撰寫這個函式:
Public Iterator Function GetLines(input As String) As IEnumerable(Of String)
Dim line As String = Nothing
Using rdr As New StringReader(input) ' Not StreamReader!
line = rdr.ReadLine()
While line IsNot Nothing
Yield line
line = rdr.ReadLine()
End While
End Using
End Function
然后用它來替換File.ReadLines()我原始示例中的 ,如下所示:
Dim lines = GetLines(GetMessage().Textbody).
Where(Function(line) line.Contains("kiwi") OrElse line.Contains("choco"))
For Each line As String In lines
Console.WriteLine(line)
Next
在這里看到它:
https://dotnetfiddle.net/fh1G4H
如果你開始添加更多的搜索詞,所有的OrElse表達都變得乏味,你可以這樣做:
Dim toSearch() As String = {"kiwi", "choco"}
Dim lines = GetLines(GetMessage().Textbody).
Where(Function(line) toSearch.Any(Function(key) line.Contains(key)))
For Each line As String In lines
Console.WriteLine(line)
Next
在這里看到它:
https://dotnetfiddle.net/AROhWQ
uj5u.com熱心網友回復:
在 c# 中因為我不知道 vb.net 但你可以翻譯
string msg = GetMessage().TextBody();
var lines = msg.Split('\n');
var res = lines.Where(l=>(l.Contains("kiwi") || l.Contains("choco")));
如果 linq 的東西不能很好地轉換為 vb.net,那么做
var res = new List<string>();
foreach(var l in lines)
{
if (l.Contains("kiwi") || l.Contains("choco"))
{
res.Add(l);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/427129.html
