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

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

  • 相关阅读:
    路径变量@PathVariable/请求参数@RequestParam的绑定以及@RequestBody
    JSR303后端校验详细笔记
    创建ssm项目步骤
    利用 R 绘制拟合曲线
    在 Linux 中将 Caps 根据是否为修饰键分别映射到 esc 和 Ctrl
    Master Transcription Factors and Mediator Establish Super-Enhancers at Key Cell Identity Genes
    Genomic Evidence for Complex Domestication History of the Cultivated Tomato in Latin America
    Variation Revealed by SNP Genotyping and Morphology Provides Insight into the Origin of the Tomato
    The genetic, developmental, and molecular bases of fruit size and shape variation in tomato
    微信支付jsapi
  • 原文地址:https://www.cnblogs.com/TeyGao/p/2737805.html
Copyright © 2011-2022 走看看