2010-11-16 200 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()); 
}