我有一个.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#?
答案 0 :(得分:5)
好吧,您可以从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的文章作为起点。
答案 1 :(得分: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));
}
答案 2 :(得分:0)
另一种变化。
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());
}