使用Node.js的fs模块读取文本文件,通过逐行解析与合并逻辑,将独立的(C)行内联追加至其前一行末尾。该方法精准区分独立与非独立行,保留原缩进与空行结构,不误伤嵌入式的(C),适用于自动化文本后处理场景。
JavaScript读取文本文件合并(C)行到前一行
作者:技术拾光
时间:2026-06-18
浏览:640
文章目录
本文介绍使用 Node.js 的 fs 模块读取文本文件,通过正则表达式定位独立的 (C) 行,将其内联追加至上一行末尾,实现结构化内容重组。适用于自动化生成 TXT 文件后的后处理场景。
在日常的文本后处理过程中,常会遇到一个典型需求:自动生成的 TXT 文件里,某些标注信息(如版权符号 (C))单独占据一行,但理想状态是让它紧跟在前面内容行的末尾。简而言之,需要将独立的 (C) 行合并到其上一行,而非进行简单的全局替换或查找。
直接使用正则替换虽然能够近似实现,但容易引发问题——例如它会匹配所有包含 (C) 的行,并将整行替换为 (C),导致原有行内容丢失,且无法确保“仅合并真正独立的行”。以下方案逻辑更清晰,且能更稳健地处理各类边界情况。
推荐方案:逐行解析 + 合并逻辑
const fs = require('fs');
function mergeCWithParent(filePath) {
const content = fs.readFileSync(filePath, 'utf8');
const lines = content.split(/rn/);
const resultLines = [];
for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim();
// 若当前行为纯 "(C)"(忽略空格),且前一行非空,则合并到前一行
if (line === '(C)' && resultLines.length > 0 && resultLines[resultLines.length - 1].trim() !== '') {
const lastLine = resultLines.pop().trim();
resultLines.push(lastLine + ' (C)');
}
// 其他情况:保留原行(包括空行、含 `(C)` 的非独立行等)
else if (line !== '(C)') {
resultLines.push(lines[i]); // 保持原始换行与空白格式
}
}
return resultLines.join('n');
}
// 使用示例
const updatedContent = mergeCWithParent('./myFile.txt');
console.log(updatedContent);
// 可选:写回文件
// fs.writeFileSync('./myFile.txt', updatedContent);
示例输入与输出验证
输入文件 myFile.txt:
Word1 (C) Word2 Word3
输出结果:
Word1 (C) Word2 Word3
- 正确处理空行;
- 仅合并独立、完整为
(C)的行; - 保留原有缩进与空行结构;
- 不误伤如
Wor(C)d1或Word6 (C)等嵌入式(C)。
注意事项
- 本方案假设
(C)总是独占一行(前后可含空白)。若遇到变体(如(C)或(C)),可将判断条件改为line.replace(/s+/g, '') === '(C)'以兼容。 - 使用
split(/rn/)已能同时兼容 Windows (rn) 和 Unix (n) 换行符。 - 生产环境中应添加错误处理(如用
try/catch包裹readFileSync)和文件存在性校验。 - 如需批量处理多个文件,可封装为异步函数,配合
fs.promises使用。
该方法逻辑直观、代码可维护性强,精准满足“将独立 (C) 行移动到其直接父行末尾”的语义需求,是 Node.js 自动化文本后处理中的一种可靠实践。
实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。