读取文本文件的前一行;如果当前行包含 "X"
Read a preceding line of a text file; if current line contains "X"
目前我有一个文件正在读取特定条目 "X"。
一旦我找到这个条目,我就可以在接下来的任何行中做我需要做的事情但是在 "X" 出现之前有一条信息需要 2 行。
现在我可以使用 var line = reader.ReadLine();
在文件中向前移动并读取 "X" 之后的行。我如何返回读取 2 行之前的数据?
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line.Contains("X"))
{
Processing
}
}
仅存储读取的最后 2 行。
Fixed size queue which automatically dequeues old values upon new enques
边走边保存:
string prev1;
string prev2;
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line.Contains("X"))
{
Processing
}
prev2 = prev1;
prev1 = line;
}
如果您需要的不止于此,它可以很容易地转换成您 push/pull 来自的队列。
存储前两行:
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 ;
}
您可以使用 File.ReadAllLines
而不是 StreamReader
,其中 returns 一个字符串数组:
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];
}
}
尽量将上一行保留在内存中,以便您可以在需要时访问它。
像这样:
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
}
目前我有一个文件正在读取特定条目 "X"。
一旦我找到这个条目,我就可以在接下来的任何行中做我需要做的事情但是在 "X" 出现之前有一条信息需要 2 行。
现在我可以使用 var line = reader.ReadLine();
在文件中向前移动并读取 "X" 之后的行。我如何返回读取 2 行之前的数据?
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line.Contains("X"))
{
Processing
}
}
仅存储读取的最后 2 行。
Fixed size queue which automatically dequeues old values upon new enques
边走边保存:
string prev1;
string prev2;
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line.Contains("X"))
{
Processing
}
prev2 = prev1;
prev1 = line;
}
如果您需要的不止于此,它可以很容易地转换成您 push/pull 来自的队列。
存储前两行:
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 ;
}
您可以使用 File.ReadAllLines
而不是 StreamReader
,其中 returns 一个字符串数组:
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];
}
}
尽量将上一行保留在内存中,以便您可以在需要时访问它。 像这样:
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
}