public class DictHelper { public static void SortDict(string sourceFilePath, string destFilePath) { if (!File.Exists(destFilePath)) { File.Create(destFilePath).Close(); } List<string> destList = new List<string>(); using (StreamReader reader = new StreamReader(sourceFilePath)) { string result = reader.ReadLine(); while (result != null) { string temp = removeSpace(result); if ((temp != string.Empty) && (!destList.Contains(temp))) { destList.Add(temp); } result = reader.ReadLine(); } } destList.Sort(); using (StreamWriter writer = new StreamWriter(destFilePath)) { foreach (string temp in destList) { writer.WriteLine(temp); } } } private static string removeSpace(string str) { return str.Trim().Replace(" ", " "); } public static void CombineDict(string firstSourceFilePath, string secondSourceFilePath, string destFilePath) { if (!File.Exists(destFilePath)) { File.Create(destFilePath).Close(); } StreamReader firstReader = null; StreamReader secondReader = null; StreamWriter destWriter = null; try { firstReader = new StreamReader(firstSourceFilePath); secondReader = new StreamReader(secondSourceFilePath); destWriter = new StreamWriter(destFilePath); string firstTempMax = string.Empty; string secondTempMax = string.Empty; string firstTemp = firstReader.ReadLine(); string secondTemp = secondReader.ReadLine(); while ((firstTemp != null) || (secondTemp != null)) { if (firstTemp != null) { if (firstTemp != firstTempMax) { if (secondTemp != null) { int result = string.Compare(firstTemp, secondTemp); if (result == 0) { destWriter.WriteLine(firstTemp); firstTempMax = firstTemp; secondTempMax = secondTemp; firstTemp = firstReader.ReadLine(); secondTemp = secondReader.ReadLine(); } else if (result > 0) { destWriter.WriteLine(secondTemp); secondTempMax = secondTemp; secondTemp = secondReader.ReadLine(); } else { destWriter.WriteLine(firstTemp); firstTempMax = firstTemp; firstTemp = firstReader.ReadLine(); } } else { destWriter.WriteLine(firstTemp); firstTempMax = firstTemp; firstTemp = firstReader.ReadLine(); } } else { firstTemp = firstReader.ReadLine(); } } else { if (secondTemp != secondTempMax) { destWriter.WriteLine(secondTemp); secondTempMax = secondTemp; secondTemp = secondReader.ReadLine(); } else { secondTemp = secondReader.ReadLine(); } } } } catch { Console.WriteLine("Exception"); } finally { if (firstReader != null) { firstReader.Close(); firstReader.Dispose(); } if (secondReader != null) { secondReader.Close(); secondReader.Dispose(); } if (destWriter != null) { destWriter.Close(); destWriter.Dispose(); } } } }
static void Main(string[] args) { string firstFilePath = @"I:\1.txt"; string secondFilePath = @"I:\2.txt"; string descFilePath = @"I:\Result.txt"; string firstSortFilePath = @"I:\1_Sort.txt"; string secondSortFilePath = @"I:\2_Sort.txt"; DictHelper.SortDict(firstFilePath, firstSortFilePath); DictHelper.SortDict(secondFilePath, secondSortFilePath); DictHelper.CombineDict(firstSortFilePath, secondSortFilePath, descFilePath); Console.WriteLine("Ok"); Console.ReadLine(); }
算法原理:将两个文件独自排序,再进行合并