【问题标题】: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));
}
}
这会将它们输出到控制台窗口,但您显然可以使用 value1 和 value2 做任何您想做的事情(将它们写入另一个文件,将它们存储在数据结构中等)。
另外,请注意正则表达式不是我的强项——可能有一种更优雅的方法来检查一行是否与您的模式匹配:)
如果您想了解更多信息,请查看 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());
}