2010-11-16 178 views
2

我有一个.EDF(文本)文件。该文件的内容如下:C#:从txt文件读取数据

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

我wnat阅读这些内容,并分析它们是这样的:

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

我怎样才能做到这一点使用C#?

回答

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

这把它们输出到控制台窗口,但你能明显做任何你想要的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)); 
} 
+0

简单而优雅,不需要正则表达式 - 我喜欢它:) – Donut 2010-11-16 15:55:36

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