想要搜索文件中的字符串,一旦找到,我想先前搜索一个不同的字符串,最后得到字符串的尾部字符。在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