将两个文件记录合并,每条记录占用一行,要求删除重复行,合并行并对其排序。

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();

        }

算法原理:将两个文件独自排序,再进行合并

原文地址:https://www.cnblogs.com/TeyGao/p/2737805.html