2013-10-10 125 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以及。