2012-06-30 122 views
0

使用C#,目標是創建一個工作應用程序,該應用程序將接受文本文件作爲輸入,讀取它並將該文本文件中的數據部分分隔爲包含索引#的不同組,並將其名稱部分可在本部分的第一部分找到。如何將純文本數據轉換爲託管格式?

這可能更多的是關於如何在純文本文件中獲取數據的問題,並將其分爲數據「組」部分?並以某種託管格式輸出文件。

文本輸入文件有13個字段,然後是狀態的附加字段,產生14個字段。

文本輸入文件將有大約1500-2000組數據段,因此最多可以有2000個條目被索引並且條目的名稱是第一個字段,即「包名」。數據的部分將是這樣的:

Package: horse 
Version: 1.2.3 
Depends: libgcc 
Provides: 
Status: user installed 
Other: other info 
Other2: other info 2 

Package: cow 
Version: 2.3.4 
Depends: libhay 
Provides: milk 
Status: user installed 
Other: white with black spots 
Other2: has a red cow bell around her neck 

Package: tractor 
Version: 0.9.22 
Depends: diesel 
Provides: 

等等

如何將數據讀取並放置到適當的表或條目或數據集?

PS感謝以前的編輯

+0

看起來它是完美的字典。所有你需要做的就是將它拆分成':' – Earlz

+0

我通常不希望在純文本文件中使用XML,但在.NET中有很好的支持來將XML數據反序列化爲運行時數據結構。 。 – reuben

回答

0

一個簡單的解決方案將只是讀取該文件在一次一行,分裂的「:」並存儲每個在其本身存儲在一個Package一個Dictionary<string, string>和將它添加到List<Package>。每當您獲得關鍵字「包」時,創建一個新的Package實例並將其添加到列表中。下面的代碼可以做到這一點,但不是非常防禦性的編碼。

static void Main(string[] args) 
    { 
     string line; 
     List<Package> packages = new List<Package>(); 
     Package package = null; 
     StreamReader file = new System.IO.StreamReader("TextFile1.txt"); 
     while ((line = file.ReadLine()) != null) 
     { 
     string[] pair = line.Split(new string[] { ": " }, StringSplitOptions.None); 
     if (pair.Length != 2) 
      continue; 
     if (pair[0] == "Package") 
     { 
      package = new Package(); 
      packages.Add(package); 
     } 
     package.Values.Add(pair[0].Trim(), pair[1].Trim()); 
     } 
     file.Close(); 
     Console.WriteLine(packages.Count); 
     foreach (Package p in packages) 
     { 
     Console.WriteLine(p); 
     foreach (KeyValuePair<string, string> pair in p.Values) 
      Console.WriteLine("{0}={1}", pair.Key, pair.Value); 
     } 
     Console.ReadLine(); 
    } 
    } 

    class Package 
    { 
    public Dictionary<string, string> Values; 
    public Package() 
    { 
     Values = new Dictionary<string, string>(); 
    } 
    } 
+0

太棒了!我把它放到代碼中,它按預期工作,謝謝!我所做的是製作一個數組並拆分數據;但我希望能找到使用最新款式的最新方式來做到這一點。以前從來不需要使用字典。但它在9K大小的小文件上運行良好,它可以完美解析它。我打開了另一個950K,並且CPU在幾分鐘內一直在80-100%。只是檢查,仍然說「沒有迴應」。它可能需要幾分鐘,但現在我想知道它是否需要在GUI上有一些活動監視器... –