zoukankan      html  css  js  c++  java
  • 将两个文件记录合并,每条记录占用一行,要求删除重复行,合并行并对其排序。

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

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

  • 相关阅读:
    阿里云安装Mono 发生错误解决方法
    在Entity Framework 中执行Tsql语句
    WinRT app guide
    开源稳定的消息队列 RabbitMQ
    Catpic: OpenSocial Container on .NET
    MSDTC 故障排除
    HTML5 canvas图形库RGraph
    《我的WCF之旅》博文系列汇总
    TSQL Enhancement in SQL Server 2005[下篇]
    谈谈基于SQL Server 的Exception Handling[上篇]
  • 原文地址:https://www.cnblogs.com/TeyGao/p/2737805.html
Copyright © 2011-2022 走看看