2014-03-27 64 views
-1

即時完成新的C#以及任何類型的編程,所以任何幫助將不勝感激。將兩個文本文件合併爲1

我有我要合併成一個 格式2個txt文件如下:

text1.txt 
apple=1 
grape=2 
strawberry=3 
etc.... 

text2.txt 
1=156 
2=26 
3=180 
etc... 

,我希望實現的格式是

Final.txt 
apple=156 
grape=26 
strawberry=180 

我不是太清楚如何對此,我正在考慮按'='分割每一行並使用if語句,但這似乎不起作用,我無法讓它正常工作。

理想情況下,如果這可以通過使用相同的按鈕void將會很好。 有人可以點我在正確的diredction

歡呼

+0

第一我雖然關於這兩個txt文件的ReadAllLines然後做一個foreach,但最終在foreach一個foreach內剛剛結束了在成品txt文件完全是一派胡言 – user3470088

+0

如果是我,我會流將這兩個文件讀到一個'List '中,並假設它們的行數相同,然後我將這些值的子字符串排列到'='字符的左邊,然後將這些文件寫回。 – mituw16

+0

這是做到這一點的一種方式。嵌套爲eaches是一個很好的第一遍。你應該發佈該代碼。 – Brad

回答

1

解析這兩個文件到字典:

對於每個文件,使用File.ReadAllLines得到一個字符串數組。然後使用foreach來遍歷數組中的每個字符串。按照您的建議使用每個字符串的String.Split來獲取一個鍵和一個值(例如「apple」和「1」)。將密鑰和值添加到字典(每個文件一個字典)。

然後foreach通過text1的字典,並使用該值作爲text2的字典的關鍵。這可讓您映射「蘋果」 - > 1 - > 156。

當您循環查看字典時,將每行寫入到final.txt中。


例如試試這個:

static void Main(string[] args) 
    { 
     String path1 = @"C:\file1.txt"; 
     String path2 = @"C:\file2.txt"; 
     String newFilePath = @"C:\final.txt"; 

     // Open the file1 to read from. 
     string[] readText = File.ReadAllLines(path1); 

     // Add file1 contents to dictionary (key is second value) 
     Dictionary<string, string> dictionaryA = new Dictionary<string, string>(); 
     foreach (string s in readText) 
     { 
      string[] parts = s.Split('='); 
      dictionaryA.Add(parts[1], parts[0]); 
     } 

     // Open the file2 to read from. 
     readText = File.ReadAllLines(path2); 

     // Add file2 contents to dictionaryB (key is first value) 
     Dictionary<string, string> dictionaryB = new Dictionary<string, string>(); 
     foreach (string s in readText) 
     { 
      string[] parts = s.Split('='); 
      dictionaryB.Add(parts[0], parts[1]); 
     } 


     // Create output file 
     System.IO.StreamWriter file = new System.IO.StreamWriter(newFilePath); 

     // write each value to final.txt file 
     foreach (var key in dictionaryA.Keys) 
     { 
      if (dictionaryB.ContainsKey(key)) 
      { 
       file.WriteLine(dictionaryA[key] + "=" + dictionaryB[key]); 
      } 
     } 

     file.Close(); 
    } 
+0

希望你不介意,但我添加了示例代碼。 –

+0

@PortlandRunner應該真的是你自己的答案。另外,我試圖提示沒有實際的代碼。 – Blorgbeard

+0

我明白了,我正在努力學習自己,當我回來的時候這個問題被關閉了,所以我無法回答。隨意刪除 –

1
  • 讀取文件1到使用IO.File.ReadAllLines字典,通過=分裂,一切左邊是關鍵,一切向右是價值。

  • 使用相同的方法將文件2讀入字典。

循環遍歷第一個字典中的所有條目,併爲每個值TryGetValue遍歷其他字典中的所有條目。如果找到,輸出一行到您的輸出文件中,通過等號key1value2(第一個字典的關鍵字和第二個字符的值)。

0

如果你想使用text1.txt作爲關鍵字的列表,並text2.txt作爲值的列表,你可以簡單地讀取行的第一個文件中的行成一個字典,例如dictKeys,並將第二個文件讀入另一個字典dictValues。然後,您可以遍歷dictKey並將dictValues中的值提取到新字典中。

此時,只需遍歷新字典並將其寫入文件即可。

Dictionary<string, int> dictKeys = new Dictionary<string, int>(); 
Dictionary<int, int> dictValues = new Dictionary<int, int>(); 

using (var r = new StreamReader("text1.txt")) 
{ 
    string line; 
    while ((line = r.ReadLine()) != null) 
    { 
     var splitLine = line.Split(','); 
     dictKeys.Add(splitLine[0], Convert.ToInt32(splitLine[1])); 
    } 
} 

using (var r = new StreamReader("text2.txt")) 
{ 
    string line; 
    while ((line = r.ReadLine()) != null) 
    { 
     var splitLine = line.Split(','); 
     dictValues.Add(Convert.ToInt32(splitLine[0]), Convert.ToInt32(splitLine[1])); 
    } 
} 

Dictionary<string, int> dictCombined = new Dictionary<string, int>(); 
foreach (var item in dictKeys) 
{ 
    var keyVal = item.Value; 
    if (dictValues.ContainsKey(keyVal)) 
     dictCombined.Add(item.Key, dictValues[keyVal].Value); 
} 

using (var w = File.OpenWrite("Final.txt")) 
{ 
    foreach (var item in dictCombined) 
     w.WriteLine("{0}={1}", item.Key, item.Value); 
}