如何读取文本文件中超过2行的内容?c#

如何读取文本文件中超过2行的内容?c#,c#,C#,我当前正在使用file.ReadLines读取文本文件到列表中。 为了识别我想读的行,我已经识别了前一行,然后为了识别该行中的字符串,我使用了splitstring并将其输出到控制台。当我想读超过2行时,我没有得到想要的输出,这是我的代码 List<string> _FileContents = File.ReadLines(path)ToList(); string pLine = ""; string previousTrack = "";

我当前正在使用
file.ReadLines
读取文本文件到
列表中。
为了识别我想读的行,我已经识别了前一行,然后为了识别该行中的字符串,我使用了splitstring并将其输出到控制台。当我想读超过2行时,我没有得到想要的输出,这是我的代码

 List<string> _FileContents = File.ReadLines(path)ToList();

        string pLine = "";
        string previousTrack = "";
        string ppLine = "";

        foreach (string line in _FileContents)
        {
            if (pLine.Contains("Race"))
            {
                if (pLine.Contains("TOD")) { }
            }
            else
            {
                if (line.Contains("Def"))
                {
                    char delimiter = ' ';
                    string value = line;
                    string[] mySubstring = value.Split(delimiter);
                    string thisTrack = mySubstring[1];
                    string thisTrackName = mySubstring[5];
                    if (thisTrack != previousTrack)
                    {
                    Console.WriteLine(thisTrack);                            
                    }
                    previousTrack = mySubstring[1];
                }
            }
        }
我的意图是在这里读3行,但在第二行即pLine上仍然使用拆分字符串。由于这些行在我正在读取的文本文件中的方式,如果我同时读取这3行,那么我将不会检索重复的数据

00000347: CEH r4  (Race) Race: 4 Post:     MTP:   TOD:2118
00000368: PHD r8  (Def) Phil   8/ 1/2016
00000406: PHD r8  (Spell)
这是我用分割线捕捉的CEH。我想在文件中的所有3个字母缩写,这3行每一组都有这个信息。这些缩写出现在许多其他行中,但没有组织。我的目标最终将是对列表进行排序,并将它们输出到winform中的组合框中

我的输出读数为2行,如下所示 DMD 切赫 博士 性病科 2BD MTD FCM 埃尔德 PMM 陆克文 行政 HSM 秦 跨国公司 EMD 自闭症 LQN 影音光碟 TQN GZN 阿杰
我想要的输出是最后一行中的“拼写”关键字。

我建议使用for循环,这样您可以一次通过三行:

var fileContents = File.ReadLines("some path").ToArray();
        for (int i = 0; i < fileContents.Length - 2; i++)
        {
            var line1 = fileContents[i+0];
            var line2 = fileContents[i+1];
            var line3 = fileContents[i+2];
        }
var fileContents=File.ReadLines(“某些路径”).ToArray();
for(int i=0;i
我的第二次尝试:

private static void Slider2()
    {
        var _FileContents = File.ReadAllLines("<path>");
        var previousLine = string.Empty;
        var lineBeforePrevious = string.Empty;
        foreach (var line in _FileContents)
        {
            // do something with line, previousLine and lineBeforePrevious

            // put some conditions around this
            lineBeforePrevious = previousLine;

            // put some conditions around this
            previousLine = line;
        }
    }
private static void Slider2()
{
var_FileContents=File.ReadAllLines(“”);
var previousLine=string.Empty;
var lineBeforePrevious=string.Empty;
foreach(文件内容中的变量行)
{
//使用line、previousLine和lineBeforePrevious执行某些操作
//在这方面提出一些条件
lineBeforePrevious=上一行;
//在这方面提出一些条件
前一行=前一行;
}
}

p、 我不能留下评论

我建议使用for循环,这样您可以一次通过三行:

var fileContents = File.ReadLines("some path").ToArray();
        for (int i = 0; i < fileContents.Length - 2; i++)
        {
            var line1 = fileContents[i+0];
            var line2 = fileContents[i+1];
            var line3 = fileContents[i+2];
        }
var fileContents=File.ReadLines(“某些路径”).ToArray();
for(int i=0;i
我的第二次尝试:

private static void Slider2()
    {
        var _FileContents = File.ReadAllLines("<path>");
        var previousLine = string.Empty;
        var lineBeforePrevious = string.Empty;
        foreach (var line in _FileContents)
        {
            // do something with line, previousLine and lineBeforePrevious

            // put some conditions around this
            lineBeforePrevious = previousLine;

            // put some conditions around this
            previousLine = line;
        }
    }
private static void Slider2()
{
var_FileContents=File.ReadAllLines(“”);
var previousLine=string.Empty;
var lineBeforePrevious=string.Empty;
foreach(文件内容中的变量行)
{
//使用line、previousLine和lineBeforePrevious执行某些操作
//在这方面提出一些条件
lineBeforePrevious=上一行;
//在这方面提出一些条件
前一行=前一行;
}
}

p、 我不能留下评论

尽管这项任务可以通过使用for(…)来实现,但您可以使用ORegex找到要处理的行:

        var input = File.ReadLines("myFile").ToArray();

        var pTable = new PredicateTable<Word>();
        pTable.AddPredicate("def", x => x.Contains("Def"));
        pTable.AddPredicate("race", x => x.Contains("Race")); 
        pTable.AddPredicate("raceTod", x => x.Contains("Race") && x.Contains("TOD")); 

        var matches = new ORegex<string>("(?<g1>{race}{def})|(?<g2>{raceTod})", pTable).Matches(input)
        foreach(var m in matches)
        {
           var lines = m.Values.ToArray()
           var first = m.OCaptures["g1"];
           var second = m.OCaptures["g2"];
           //process your lines/groups
        }

在“Race”和“Def”行之后,您可以获得1到3行。尽管此任务可以通过使用for(…)来实现,但您可以使用ORegex找到要处理的行:

        var input = File.ReadLines("myFile").ToArray();

        var pTable = new PredicateTable<Word>();
        pTable.AddPredicate("def", x => x.Contains("Def"));
        pTable.AddPredicate("race", x => x.Contains("Race")); 
        pTable.AddPredicate("raceTod", x => x.Contains("Race") && x.Contains("TOD")); 

        var matches = new ORegex<string>("(?<g1>{race}{def})|(?<g2>{raceTod})", pTable).Matches(input)
        foreach(var m in matches)
        {
           var lines = m.Values.ToArray()
           var first = m.OCaptures["g1"];
           var second = m.OCaptures["g2"];
           //process your lines/groups
        }

在“Race”和“Def”行之后,您可以获得1到3行内容。

能否添加一个示例文本文件以及您获得的相应输出和您想要的输出?该文件是否仅包含3行内容?或者多行,但三行一组?这里是文本文件的一个片段,请注意,这是我正在查看的两行。这两行重复了很多次,但这是我用拆分字符串捕获的CEH<代码>00000347:CEH r4(种族)种族:4 Post:MTP:TOD:2118 00000368:PHD r8(Def)Phil 8/1/2016 00000406:PHD r8(拼写)
这些行现在被添加到原始问题中,对不起,我不知道。你能添加一个示例文本文件以及你得到的相应输出和你想要的输出吗?该文件只包含3行吗?或者多行,但三行一组?这里是文本文件的一个片段,请注意,这是我正在查看的两行。这两行重复了很多次,但这是我用拆分字符串捕获的CEH<代码>00000347:CEH r4(种族)种族:4 Post:MTP:TOD:2118 00000368:PHD r8(Def)Phil 8/1/2016 00000406:PHD r8(拼写)这些行现在被添加到原始问题中,抱歉我不知道。如果你不打算流式传输它,最好使用
File.ReadAllLines(“一些路径”)
。也
fileContents[i+0]可以吗better@ZoranBasic因为我正在阅读的文本文件有几十万行长,并且有大量重复数据,所以我正在搜索文本文件中不在同一位置的特定行。出于这个原因,我搜索了三行包含特定关键字的内容,这样它读取速度很快,并且只返回该组合中第二行的子字符串。使用我已经编写的代码,我如何让它搜索三行,而不是我已经可以成功搜索到的第二行?@Joroen感谢我在回答中提出的建议。如果你不打算流式传输,最好使用
File.ReadAllLines(“某个路径”)
。也
fileContents[i+0]可以吗better@ZoranBasic因为我正在阅读的文本文件有几十万行长,并且有大量重复数据,所以我正在搜索文本文件中不在同一位置的特定行。出于这个原因,我搜索了三行包含特定关键字的内容,这样它读取速度很快,并且只返回该组合中第二行的子字符串。使用我已经编写的代码,我如何让它搜索三行,而不是我已经可以成功搜索的2行呢