2

我正在尝试获取包含特定单词的行之前的行列表。这是我的脚本:

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();
}
4

4 回答 4

2

Using LINQ method syntax:

var lines = File.ReadLines("E:\\overview2.srt")
        .Where(line => line.Contains("medication"))
        .ToList();

and LINQ keyword syntax:

var lines = (
    from line in File.ReadLines("E:\\overview2.srt")
    where line.Contains("medication")
    select line
).ToList();

If you need an array, use .ToArray() instead of .ToList().

Also, if all you need is to iterate once over the lines, don't bother with ToArray or 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);
}
于 2012-12-30T08:09:43.903 回答
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);           
        }
    }

很难从您的问题中看出您要在找到的行之前查找所有行还是仅查找一行。(您必须处理在第一行找到搜索文本的特殊情况)。

于 2012-12-30T07:08:45.310 回答
0

你可以创建一个Queue<string>. 当您通过它时,将每一行添加到它。如果它的行数超过了所需的行数,则将第一个项目出列。当您点击所需的搜索表达式时,Queue<string>其中包含您需要输出的所有行。

或者,如果内存不是对象,您可以使用File.ReadAllLines(参见http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx)并索引到一个数组中。

于 2012-12-30T06:55:42.723 回答
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++;
                }
于 2012-12-30T06:57:23.237 回答