C# 在c语言中搜索文本文件中的多个字符串#

C# 在c语言中搜索文本文件中的多个字符串#,c#,C#,要搜索文件中的字符串,一旦找到,我想转到前面,搜索不同的字符串,最后得到字符串的尾随字符 假设我在文件中的文字是这样的 第1行---------示例文本=“ABCD”详细信息已编程。。。诸如此类 第2行----------这是第2行product=“12345”并继续 我想先搜索12345,这是唯一的。一旦找到,我想转到前一行并搜索交易对手的首次出现,一旦找到,我想捕获字符串ABCD您可以在每次迭代之前缓存该行: string prevLine = ""; while((line = reade

要搜索文件中的字符串,一旦找到,我想转到前面,搜索不同的字符串,最后得到字符串的尾随字符

假设我在文件中的文字是这样的

第1行---------示例文本=“ABCD”详细信息已编程。。。诸如此类

第2行----------这是第2行product=“12345”并继续


我想先搜索12345,这是唯一的。一旦找到,我想转到前一行并搜索交易对手的首次出现,一旦找到,我想捕获字符串ABCD

您可以在每次迭代之前缓存该行:

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

如果需要返回超过1行,可以继续使用相同的模式,但如果需要返回超过1或2行,则显然会变得混乱。如果文件不是那么大,您也可以读取整个内容并缓存所有行,但如果文件可能非常大,因此一次缓存所有行时会占用大量内存,这就不好了。

您可以使用正则表达式(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行”@TimSchmelter是的,我决定回答他的示例问题,因为这就是他给出的细节