-3

想在文件中搜索一个字符串,一旦找到,我想先去搜索一个不同的字符串,最后得到字符串的尾随字符。

假设我在文件中的文本如下

第 1 行 ------------ 示例文本 交易对手="ABCD" detailsprogrammed... 依此类推

第 2 行 ------------ 这是第二行 product="12345" 并继续

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

4

2 回答 2

2

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

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

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

于 2013-10-10T21:38:36.860 回答
0

您可以使用正则表达式 (System.Text.RegularExpressions)。首先读入一大段行并将它们连接在一起。然后将它们传递给 Regex 对象的 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 的其他值。

于 2013-10-10T22:06:49.120 回答