2013-10-10 156 views
-2

想要搜索文件中的字符串,一旦找到,我想先前搜索一個不同的字符串,最後得到字符串的尾部字符。在c文本文件中搜索多個字符串#

比方說,我在文件中的文本是這樣

線1個------------示例文本對手=「ABCD」 detailsprogrammed ......等等

線2 ------------這是第二行產品=「12345」,並繼續

我想先搜索12345這是唯一的。一旦發現我想去的前行和搜索對手的第一次出現,一旦發現我想捕捉字符串ABCD

+0

爲什麼你只是不從文件結尾讀到第一行? –

+3

你顯示兩行,你的3行返回邏輯在哪裏?你有什麼嘗試? –

+2

這樣的作業氣味...... :) – jsmith

回答

2

你可以只緩存之前每次迭代行:

string prevLine = ""; 
while((line = reader.ReadLine()) != null) 
{ 
    if (line.contains("12345")) 
    { 
     textIWant = prevLine.Substring(//..etc 
    } 
    prevLine = line; 
} 

如果你需要返回超過1行的話,你可以繼續使用相同的模式,但是如果你需要返回超過1或2的話,顯然會變得雜亂。如果文件不是那麼大,你還可以閱讀整個事情,只是緩存所有的行,但如果這些文件可能非常大,並且因此佔用大量內存來一次緩存所有這些都不會很好。

+0

_「我想走3條線」_ –

+2

@TimSchmelter是的,我決定回答他的例子問題,因爲這是他給出的具體細節 –

0

您可以使用正則表達式(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以及。