将两个文件记录合并,每条记录占用一行,要求删除重复行,合并行并对其排序。
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(); }
算法原理:将两个文件独自排序,再进行合并
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现