2014-12-01 116 views
0

讀取* .txt文件並獲取文本特定區域的最佳實踐是什麼?從txt文件讀取並獲取特定文本

我的* .txt文件的樣子:

[Product code] 
MYPRODUCT-CODE123 

[List price] 
28.10 

[Price] 
20.30 

[Weight] 
10 

[Quantity] 
1 

[Min quantity] 
1 

[Shipping freight] 
N 

[Free shipping] 
N 

[Product name] 
My product name 

目前我正在讀txt文件是這樣的:

 String[] allfiles = System.IO.Directory.GetFiles(_path, "*.txt", System.IO.SearchOption.AllDirectories); 

     foreach (string filePath in allfiles) { 


      using (StreamReader sr = File.OpenText(filePath)) 
      { 
       string s = sr.ReadToEnd(); 

      } 
     } 

我如何獲得近[產品代碼]文本,等我的txt文件中的其他'關鍵條款'

回答

2

我只想用一個正則表達式與捕獲組搶對,然後將其加載到字典:

var dict = Regex 
       .Matches(str, @"\[([^\]]+)\]([^\[]+)") 
       .Cast<Match>() 
       .ToDictionary(match => match.Groups[1].ToString(), 
          match => match.Groups[2].ToString().Trim()); 

//dict = { [Product Code, MYPRODUCT-CODE123], [List Price, 28.10], [Price, 20.30] ...} 

我會強烈建議你存儲在XML格式的數據,如果你保持它的所有在文本文件中。它會在稍後爲您節省這個麻煩。

+0

我不是試圖存儲的東西,我正在一個小應用程序,將創建一個基於文件夾結構* .csv文件。我明確同意你的意見。 – 2014-12-01 20:09:02

1

所以你有你的字符串s。我們從那裏開始。

分割上新的生產線,把對進入詞典,獲得該項目:

var lines = s.Split(
       new[] { Environment.NewLine }, 
       StringSplitOptions.RemoveEmptyEntries) 
      .ToArray(); 

// pairing thanks to http://stackoverflow.com/questions/1624341/ 
var dictionary = lines.Where((x, i) => i < lines.Length) 
         .Select((x, i) => 
          new KeyValuePair<string, string>(
           x.Trim('[', ']'), // get rid of brackets 
           lines[i + 1])) 
         .ToDictionary(x => x.Key, x => x.Value); 

var productCode = dictionary["Product code"]; 
+1

附:目前沒有在開發機器上,所以你可能需要調整編譯 – 2014-12-01 19:34:25

0
System.IO.StreamReader file = 
    new System.IO.StreamReader("Your txt file"); 

Dictionary<string, string> values = new Dictionary<string, string>(); 
string keyContainer = ""; 

while((line = file.ReadLine()) != null) 
{ 
    if(line.Trim() == "") 
     continue; 

    if(values.Keys.Contains(line.Trin()) 
     continue; 

    if(line.StartsWith('[') && line.EndsWith("]") 
    { 
     keyContainer = line.Trim(); 
     values.Add(line.Trim(), ""); 
    } 
    else 
    { 
     values[keyContainer] = line.Trim();  
    } 
} 

有了這個代碼,你將不得不在字典文件的所有值。它們將如下所示:

Key=[Quantity]; Value=1 

如果您希望在字典中保存密鑰時可以刪除括號。

0

另一種方式來做到這一點:

string[] lines = input.Replace(Environment.NewLine, "\n").Replace('\r', '\n').Split('\n'); 
    for (int q = 0; q < lines.Length; q++) 
    { 
     string line = lines[q]; 
     if (string.IsNullOrWhiteSpace(line)) 
      continue; 

     if (line.StartsWith("[") && line.EndsWith("]")) 
     { 
      string key=""; 
      string value=""; 

      for (int i=1; i<line.Length - 1; i++) 
      { 
       key=key + line[i]; 
      }   

      value = lines[q + 1]; 
      q++; 

      dictionary.Add(key, value); 
     } 
    } 

    foreach (string k in dictionary.Keys) 
    { 
     Console.WriteLine(k + " ==> " + dictionary[k]); 
    }