读取文本文件的前一行;如果当前行包含" X"

时间:2015-08-06 10:45:40

标签: c# text-files streamreader

目前我正在为特定条目阅读文件" X"。 一旦我找到这个条目,我可以在以下任何行中做我需要做的事情但是在" X"之前有一条信息需要2行。出现。 现在我可以使用var line = reader.ReadLine();在文件中前进并读取" X"之后的行。如何在之前移回读取数据2行?

while (!reader.EndOfStream)
{
    var line = reader.ReadLine();

    if (line.Contains("X"))
    {
        Processing
    }
}

5 个答案:

答案 0 :(得分:10)

随身携带保存:

string prev1;
string prev2;

while (!reader.EndOfStream)
{

    var line = reader.ReadLine();

    if (line.Contains("X"))
    {
        Processing
    }

    prev2 = prev1;
    prev1 = line;
}

如果您需要更多,可以很容易地将其转换为您推/拉的队列。

答案 1 :(得分:3)

您可以使用返回字符串数组的StreamReader代替File.ReadAllLines

string[] lines = File.ReadAllLines("file.txt")
for (int i = 0; i < lines.Length; i++)
{
    if (lines[i].Contains("X") && i >= 2)
    {
         string res = lines[i-2];
    } 
}

答案 2 :(得分:0)

答案 3 :(得分:0)

存储前两行:

string [] lineprev = new string[]{"",""} ;
while (!reader.EndOfStream)
{
    var line = reader.ReadLine();
    if (line.Contains("X"))
    {
        // Processing : Find info in lineprev[1]
    }
    lineprev[1]=lineprev[0] ;
    lineprev[0]= line ;
}

答案 4 :(得分:-1)

尝试将前一行保留在内存中,以便在需要时可以访问它。 像这样:

var prev;
while (!reader.EndOfStream)
{
    var line = reader.ReadLine();

    if (line.Contains("X")) {
        // Processing both line and prev
    }

    prev = line; // remember previous line for future use
}