繁体   English   中英

C#:从txt文件读取数据

[英]C#: Read data from txt file

我有一个.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#做到这一点?

好吧,您可以从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上有关从文本文件读取数据的文章作为起点。

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

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

另一种变化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM