想要搜索文件中的字符串,一旦找到,我想先前搜索一個不同的字符串,最後得到字符串的尾部字符。在c文本文件中搜索多個字符串#
比方說,我在文件中的文本是這樣
線1個------------示例文本對手=「ABCD」 detailsprogrammed ......等等
線2 ------------這是第二行產品=「12345」,並繼續
我想先搜索12345這是唯一的。一旦發現我想去的前行和搜索對手的第一次出現,一旦發現我想捕捉字符串ABCD
想要搜索文件中的字符串,一旦找到,我想先前搜索一個不同的字符串,最後得到字符串的尾部字符。在c文本文件中搜索多個字符串#
比方說,我在文件中的文本是這樣
線1個------------示例文本對手=「ABCD」 detailsprogrammed ......等等
線2 ------------這是第二行產品=「12345」,並繼續
我想先搜索12345這是唯一的。一旦發現我想去的前行和搜索對手的第一次出現,一旦發現我想捕捉字符串ABCD
你可以只緩存之前每次迭代行:
string prevLine = "";
while((line = reader.ReadLine()) != null)
{
if (line.contains("12345"))
{
textIWant = prevLine.Substring(//..etc
}
prevLine = line;
}
如果你需要返回超過1行的話,你可以繼續使用相同的模式,但是如果你需要返回超過1或2的話,顯然會變得雜亂。如果文件不是那麼大,你還可以閱讀整個事情,只是緩存所有的行,但如果這些文件可能非常大,並且因此佔用大量內存來一次緩存所有這些都不會很好。
_「我想走3條線」_ –
@TimSchmelter是的,我決定回答他的例子問題,因爲這是他給出的具體細節 –
您可以使用正則表達式(System.Text.RegularExpressions)。首先閱讀一大段代碼並將它們連接在一起。然後將它們傳遞給正則表達式對象的Match方法。
假設你想回去三條線,你可以做這樣的事情。
Regex RX = new Regex(@"counterparty=""([^""]*)"" (.*?\n){3}product=""12345""",
RegexOptions.Singleline | RegexOptions.IgnoreCase);
Match M = RX.Match(YourString);
if (M.Success)
strCounterParty = M.Result("${1}"); //Returns the value between the 1st set of()'s
這樣你只會匹配產品編號而不是其他的一些其他值12345以及。
爲什麼你只是不從文件結尾讀到第一行? –
你顯示兩行,你的3行返回邏輯在哪裏?你有什麼嘗試? –
這樣的作業氣味...... :) – jsmith