Node.js fs模块读取竖线分隔多数据文本文件及格式支持问题
嘿,我来帮你理清这两个关于Node.js fs模块的问题:
问题1:fs模块是否仅支持读取文本文件?
当然不是!fs模块是Node.js核心的文件系统操作工具,它能处理所有类型的文件——不管是文本文件(比如.txt、.md、.json),还是二进制文件(图片、视频、压缩包、可执行程序等等)。
两者的区别仅在于读取时的编码设置:
- 读取文本文件时,我们通常会指定
encoding: 'utf8',这样拿到的直接是人类可读的字符串; - 读取二进制文件时,可以不指定编码(默认返回
Buffer对象),或者显式设置encoding: null,之后你可以根据需求对Buffer进行转码、解析等操作。
问题2:如何读取带空单元格的竖线分隔文本?
先看你提供的样本数据:
James|Allister|12345|28|Sunderland|14
Andy|Cook|88888|33|New Jersey|16
Maria|Konsick|44||34
要拆分出每个数据(包括保留空单元格),可以按以下步骤来:
- 第一步:读取文件内容,拿到完整的字符串;
- 第二步:把字符串按换行符分割成单独的行,过滤掉可能的空行;
- 第三步:对每一行按竖线
|分割字段,同时清理每个字段的前后空格,空单元格会保留为空字符串,方便后续处理。
给你写个实用的示例代码:
const fs = require('fs'); // 推荐用异步读取,避免阻塞主线程 fs.readFile('./your-data-file.txt', 'utf8', (err, fileContent) => { if (err) { console.error('读取文件时出错了:', err); return; } // 处理文本内容 const validRows = fileContent.split('\n').filter(row => row.trim() !== ''); const parsedData = validRows.map(row => { // 分割每个字段并去除前后空格 return row.split('|').map(field => field.trim()); }); console.log('拆分后的结构化数据:', parsedData); }); // 同步读取版本(适合简单脚本场景) // try { // const fileContent = fs.readFileSync('./your-data-file.txt', 'utf8'); // const validRows = fileContent.split('\n').filter(row => row.trim() !== ''); // const parsedData = validRows.map(row => row.split('|').map(field => field.trim())); // console.log('拆分后的结构化数据:', parsedData); // } catch (err) { // console.error('读取文件时出错了:', err); // }
运行这段代码后,你会得到一个二维数组,每个子数组对应一行的所有字段。比如第三行的结果会是['Maria', 'Konsick', '44', '', '34'],空单元格被保留为空字符串,方便你后续进行判断或业务处理。
内容的提问来源于stack exchange,提问作者James




