【问题标题】:Read a text file until a line contains some string file, then again keep reading next lines until another string is encountered读取一个文本文件,直到一行包含一些字符串文件,然后再次继续读取下一行,直到遇到另一个字符串
【发布时间】:2019-07-31 05:10:25
【问题描述】:

我必须读取一个文本文件,如果行包含“.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”的行。我已经像 immidiate 下一行代码一样发现“.engineering”有“.default”。但情况并非总是如此。 ".default" 可以在下一个 ."engineering" 之前出现在任何行中。

我希望问题陈述清楚。

【问题讨论】:

  • 请输入您的代码。
  • 我们可以帮助您解决问题,但为此,您需要展示您已经尝试过的内容。您需要为此输入代码。
  • 我已经添加了代码。
  • 使用与查找.engineering 相同的逻辑。您可以为此使用另一个嵌套循环。
  • 我不知道如何将该逻辑放入代码中。你可以请张贴代码吗? @这是一个陷阱

标签: c# filestream var using


【解决方案1】:

试试这个代码 -

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。请记住,如果在文件的其余部分中找不到异常,它将引发异常。

【讨论】:

  • 哦,是的,它可以工作......但我还需要处理下一组行中是否不存在 .default。
  • 相应修改while循环的条件
  • 是的,部分工作...您的代码正在下一行搜索“.default”,直到文件结束。但我只想搜索到下一个“.engineering”。如果未找到,则将 def_val 设置为 null。
  • 我已经有了使用 goto 语句的想法。我相应地编写了逻辑。它现在完美运行。感谢所有试图帮助我的人。
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
相关资源
最近更新 更多