问题描述
我有一个循环的 WriteStream 来创建一个制表符分隔格式的大数据文件,其中有一堆不同的记录:
const writeUsers = fs.createWriteStream(
'./client_files/file_' + Math.floor(1000000 + Math.random() * 9000000) + '_01_' +
fileNameDateFormatter() + '.txt',{ encoding: 'utf-8' }
);
await writeFileHeader(writeUsers);
await writeRecordHeader(writeUsers);
try {
let i = process.env.REPEAT ? parseInt(process.env.REPEAT as string) : 10;
while (i > 0) {
i -= 1;
await createRecord(writeUsers);
}
writeUsers.end();
await streamPromises.finished(writeUsers);
} catch (e) {
console.error(e);
}
})();
它从 createRecord 函数中获取数据,该函数基本上只是一个大量变量列表,并为其分配了伪造数据,然后将这些变量分配给每个记录都有一个记录“类型”,即数据行中的第一个值。
async function createRecord(writer: fs.WriteStream) {
const abcRecType = 'ABC';
const defRecType = 'DEF';
const ghiRecType = 'GHI';
const jklRecType = 'JKL';
const mnorecType = 'MNO';
const pqrRecType = 'PQR';
const stuRecType = 'STU';
const data = `${abcRecType}\n${defRecType}\n${ghiRecType}\n${jklRecType}\n${mnorecType}\n${pqrRecType}\n${stuRecType}\n`;
if (!writer.write(data)) {
const isDrained = new Promise((resolve) => {
writer.once('drain',resolve);
});
await isDrained;
writer.write(data);
}
}
现在按照我拥有的所有内容的方式,我以循环方式获取文件中的每一行输出,如下所示:
ABC 01
DEF 01
GHI 01
JKL 01
MNO 06
PQR 02
STU 01
ABC 01
DEF 01
GHI 01
JKL 01
MNO 06
PQR 02
STU 01
等等。基于我在运行时分配的多少循环。我想要做的是按第一个记录类型对这些记录进行分组,如下所示:
ABC 01
ABC 01
DEF 01
DEF 01
GHI 01
GHI 01
JKL 01
JKL 01
MNO 06
MNO 06
PQR 02
PQR 02
STU 01
STU 01
但是我不知道该怎么做,如果需要,我可以提供更多代码。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)