我正在尝试获取包含特定单词的行之前的行列表。这是我的剧本:
private static void Main(string[] args)
{
int counter = 0;
string line;
System.IO.StreamReader file = new System.IO.StreamReader("E:\\overview2.srt");
List<string> lines = new List<string>();
while ((line = file.ReadLine()) != null)
{
if (line.Contains("medication"))
{
int x = counter - 1;
Console.WriteLine(x); // this will write the line number not its contents
}
counter++;
}
file.Close();
}
答案 0 :(得分:2)
使用LINQ方法语法:
var lines = File.ReadLines("E:\\overview2.srt")
.Where(line => line.Contains("medication"))
.ToList();
和LINQ关键字语法:
var lines = (
from line in File.ReadLines("E:\\overview2.srt")
where line.Contains("medication")
select line
).ToList();
如果您需要数组,请使用.ToArray()
代替.ToList()
。
此外,如果你需要的只是迭代一次,不要打扰ToArray
或ToList
:
var query =
from line in File.ReadLines("E:\\overview2.srt")
where line.Contains("medication")
select line;
foreach (var line in query) {
Console.WriteLine(line);
}
答案 1 :(得分:0)
您可以创建Queue<string>
。当你经过它时,添加每一行。如果它具有超过所需行数的行,则将第一个项目出列。当您点击所需的搜索表达式时,Queue<string>
包含您需要输出的所有行。
或者如果内存不是对象,您可以使用File.ReadAllLines
(请参阅http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx)并将其索引到数组中。
答案 2 :(得分:0)
试试这个:
int linenum = 0;
foreach (var line in File.ReadAllLines("Your Address"))
{
if (line.Contains("medication"))
{
Console.WriteLine(string.Format("line Number:{} Text:{}"linenum,line)
//Add to your list or ...
}
linenum++;
}
答案 3 :(得分:0)
此代码将显示包含搜索文本的任何行之前的所有行。
private static void Main(string[] args)
{
string cacheline = "";
string line;
System.IO.StreamReader file = new System.IO.StreamReader("C:\\overview2.srt");
List<string> lines = new List<string>();
while ((line = file.ReadLine()) != null)
{
if (line.Contains("medication"))
{
lines.Add(cacheline);
}
cacheline = line;
}
file.Close();
foreach (var l in lines)
{
Console.WriteLine(l);
}
}
很难从您的问题中找出您在找到的行之前或仅仅是一行查找所有行的位置。 (您必须处理在第一行找到搜索文本的特殊情况。)