读取文本文件,直到一行包含一些字符串文件,然后再次继续读取下一行,直到遇到另一个字符串

时间:2019-07-31 05:10:25

标签: c# filestream var using

我必须阅读一个文本文件,如果行包含“ .engineering $ name”,则查找包含“ .default”的行,并对该行进行一些操作。我需要继续读取行,直到在一组行中找到“ .default”为止。 (这个设置就像,直到我点击下一个“ .engineering”)。对于下一个“ .engineering $ name”,再次像这样循环循环

注意: “ .engineering”关键字是固定字符串,$ name动态读取, “ .default”是固定字符串,

我能够做的第一部分是读取包含“ .engineering $ name”的行 我无法获得下一部分的逻辑,找到“ .default”,直到遇到下一个“ .engineering”

在C#中寻找逻辑或该逻辑的代码。谢谢

代码:

using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
                using (var reader = new StreamReader(stream))
                {
                    while (!reader.EndOfStream)
                    {
                        string[] def_arr = null;
                        var line1 = reader.ReadLine(); 
                        if (line1.Contains(".engineering " + name + " ") && !reader.EndOfStream)
                        {
                            var nextLine = reader.ReadLine(); // nextLine contains ".default"
                            def_arr = nextLine.Split(' ');
                            def_val = def_arr[1].Replace("\"", "");
                            port_DefaultValues.Add(name + ", " + def_val);                   
                        }
                    }
                }

var nextLine是包含“ .default”的行。我编码的过程很艰辛,发现“ .engineering”的下一行具有“ .default”。但是并非总是如此。 “ .default”在到达下一个“工程”之前可以在任何行中。

我希望问题陈述清楚。

1 个答案:

答案 0 :(得分:0)

尝试此代码-

using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
        using (var reader = new StreamReader(stream))
        {
            while (!reader.EndOfStream)
            {
                string[] def_arr = null;
                var line1 = reader.ReadLine();
                if (line1.Contains(".engineering " + name + " ") && !reader.EndOfStream)
                {
                    var nextLine = reader.ReadLine(); // nextLine contains ".default"
                    while (!nextLine.Contains(".default") && !reader.EndOfStream)
                    {
                        nextLine = reader.ReadLine();
                    }
                    def_arr = nextLine.Split(' ');
                    def_val = def_arr[1].Replace("\"", "");
                    port_DefaultValues.Add(name + ", " + def_val);
                }
            }
        }

我刚刚添加了一个循环,该循环将继续读取下一行,直到遇到.default。请记住,如果在文件的其余部分中找不到该异常,则会引发异常。