【问题标题】:C#: Read data from txt fileC#:从 txt 文件中读取数据
【发布时间】:2010-11-16 15:07:18
【问题描述】:

我有一个 .EDF(文本)文件。文件内容如下:

    ConfigFile.Sample, Software v0.32, CP Version 0.32
    [123_Float][2]
    [127_Number][0]
    [039_Code][70]

我想阅读这些项目并像这样解析它们:

    123_Float - 2
    127_Number - 0
    039_Code - 70

如何使用 C# 做到这一点?

【问题讨论】:

    标签: c# regex parsing text-files


    【解决方案1】:

    好吧,您可以从File.ReadAllLines() 方法开始。然后,遍历该文件中的行,检查它们是否匹配模式。如果他们这样做了,请提取必要的文本并用它做任何你想做的事情。

    这是一个假设您需要格式为 [(field 1)][(field 2)] 的行的示例:

    // Or wherever your file is located
    string path = @"C:\MyFile.edf";
    
    // Pattern to check each line
    Regex pattern = new Regex(@"\[([^\]]*?)\]");
    
    // Read in lines
    string[] lines = File.ReadAllLines(path);
    
    // Iterate through lines
    foreach (string line in lines)
    {
       // Check if line matches your format here
       var matches = pattern.Matches(line);
    
       if (matches.Count == 2)
       {
          string value1 = matches[0].Groups[1].Value;
          string value2 = matches[1].Groups[1].Value;
    
          Console.WriteLine(string.Format("{0} - {1}", value1, value2));
       }
    }
    

    这会将它们输出到控制台窗口,但您显然可以使用 value1value2 做任何您想做的事情(将它们写入另一个文件,将它们存储在数据结构中等)。

    另外,请注意正则表达式不是我的强项——可能有一种更优雅的方法来检查一行是否与您的模式匹配:)

    如果您想了解更多信息,请查看 MSDN 在 reading data from a text file 上的文章作为起点。

    【讨论】:

      【解决方案2】:

      让我们假设您的文件确实像您描述的那样简单。然后你可以删除第一行并像这样解析数据行:

      foreach (string line in File.ReadAllLines(@"C:\MyFile.edf").Skip(1))
      {
          var parts = line.Split("][");
          var value1 = parts[0].Replace("[", "");
          var value2 = parts[1].Replace("]", "");
      
          Console.WriteLine(string.Format("{0} - {1}", value1, value2));
      }
      

      【讨论】:

      • 简单优雅,不需要正则表达式——我喜欢它:)
      【解决方案3】:

      另一种变化。

      var lines = File.ReadAllLines(file)
          .Skip(1)
          .Select(x => x.Split(new[] { '[', ']' }, 
              StringSplitOptions.RemoveEmptyEntries));
      foreach(var pair in lines)
      {
          Console.WriteLine(pair.First()+" - "+pair.Last());
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-01
        • 1970-01-01
        • 2020-10-09
        • 2017-08-23
        • 2012-02-08
        • 2023-03-26
        • 1970-01-01
        • 2021-10-29
        相关资源
        最近更新 更多