集行合并、文件拼接、中文截断修复、标点替换于一体
写代码的人大概都经历过这样的时刻:手头有一批文本文件需要处理,合并短行、拼接文件、修复莫名其妙被截断的中文、批量替换标点符号。需求本身不复杂,但每次都要翻出零散的批处理脚本、PowerShell 命令,或者临时写一段 C# 控制台程序,用完就扔,下次再从头来过。
这些碎片化的处理方式困扰了我很久。于是我把它们攒到了一起,做成了一个 Windows 桌面工具,TwilightRainTextTool。
为什么会有这个工具
最开始,我维护着四五个功能重叠的批处理/PowerShell 脚本,散落在不同项目的角落里。每次要用的时候,得先回忆”那个处理中文截断的脚本放在哪个文件夹了”,再手动改参数、拖文件、等执行。更麻烦的是,这些脚本的输入输出格式还不统一,有的原地修改,有的生成新文件,有的需要手动指定编码。
需求是固定的,但每次处理的成本却是重复的。与其每次都写一次胶水代码,不如做一个统一的 GUI 工具,把常用的文本处理能力集成进去,点点鼠标就能完成。
它能做什么
工具目前提供了四个核心功能,分别对应四个标签页。
1. 行合并
这是最常用的功能。把一堆短行按阈值合并成有意义的段落,比如把被意外拆散的文本重新拼接起来。支持按字节数或字符数两种模式合并,阈值范围 1 到 1000,可以灵活调整。
合并之后还有三道后处理工序:
- 修复中文截断:如果当前行以中文字符结尾,自动合并下一行(
Hello\nWorld→HelloWorld) - 修复标点截断:如果当前行以自定义标点结尾,自动合并下一行(
回家吧,\n孩子→回家吧,孩子) - 行尾不合并:如果当前行以特定标点(如句号、感叹号、章节标题标记)结尾,则阻止合并,保持独立
整个处理是单次文件写入的流水线:读文件 → 阈值合并 → 中文修复 → 标点截断修复 → 标点替换 → 写输出。
2. 文件拼接
把一个目录下匹配通配符模式的所有文件按名称排序后合并成一个文件。每个文件会单独检测编码,统一以 UTF-8 with BOM 格式输出。
3. 标点替换
自由配置查找-替换规则(比如把连续的句号 。。 替换成单个 。),支持规则的增删改和排序。规则以 JSON 格式持久化到 replace_rules.json,重启程序后自动加载。
4. 关于页面
显示版本、作者信息和 GitHub 链接,并提供了语言切换功能,简体中文、繁體中文、English 三语实时切换,偏好自动保存。
一些设计上的考量
在开发这个工具时,我给自己定了几条原则:
安全第一。所有处理结果都保存为 *_Processed.* 格式的新文件,绝不覆盖原始文件。误操作了?原始文件还在,随时可以重来。
编码自动检测。文本处理最头疼的问题就是编码。工具会优先检测 BOM,其次尝试 UTF-8 验证,最后 fallback 到 GBK。大多数常见的中文文本文件都能自动识别,不需要用户手动选择编码。
批量处理。支持一次拖拽多个文件,全部处理完毕。不用一个一个等。
拖拽即用。直接把 .txt 文件拖到窗口上就能开始处理。操作路径尽可能短。
国际化。内置了三种语言,并根据系统 UI 语言自动匹配。虽然是个小工具,但多语言支持从第一天就做了。
技术实现
工具基于 .NET 7 WinForms 开发。架构上做了比较清晰的分层:
- Controls/:四个标签页的 UI 控件,从主窗体独立出来,保持 MainForm 只有约 165 行
- Services/:核心业务逻辑,编码检测、行合并算法、文件拼接、标点替换、处理流水线编排
- Localization/:三语 JSON 资源文件 + 运行时切换逻辑
- TextTool.Tests/:63 个单元测试,覆盖各个服务类
整个项目遵循了比较规整的项目结构,也写了架构文档(ARCHITECTURE.md)和架构决策记录(adr/),方便后续维护和他人理解。
写在最后
TwilightRain Text Tool 不是一个宏大的项目,它解决的是我日常工作中真实遇到的小问题。但正是这些小工具,积少成多,最终能节省下可观的时间。
如果你也有类似的文本处理需求,欢迎下载试用。项目开源在 GitHub 上,Issue 和 PR 都随时欢迎。
项目地址:https://github.com/TwilightRainDev/TwilightRainTextTool
本文转载自 TwilightRain’s Blog
评论