我有一个超过 32kb 的字符串,需要对其进行分块,每个 block 的大小限制为 32kb。这可能吗?使用JavaScript,我只能找到诸如切割字符串或分割字符串之类的代码,我认为这些代码与我的任务无关
stringChop = function(str, size){
if (str == null)
return [];
str = String(str);
return size > 0 ? str.match(new RegExp('.{1,' + size + '}', 'g')) : [str];
}
我还有检查字节的代码
const byteSize = str => new Blob([str]).size;
const result = byteSize("sample")
最佳答案
你真的不想“花时间”在 Node 中分割大字符串。
如果你必须使用原版
这对于 JavaScript 来说是完全可能的(而且你已经非常接近了)。尽管在没有正则表达式和生成器的情况下这会更优雅:
function* chunk(str, size = 3) {
for(let i = 0; i < str.length; i+= size ) yield str.slice(i, i + size);
}
[...chunk('hello world')]; // ["hel", "lo ", "wor", "ld"];
如果你会使用 Node.js
我会使用createReadStream
读取您想要拆分的文件,然后在达到限制时将其写入不同的文件。这更有效,因为您不需要创建许多小字符串或将所有数据保留在内存中:
(async () => {
let currentFileIndex = 0, currentBytes = 0;
let currentFile = fs.createWriteStream(`${currentFileIndex}.csv`);
for await(const chunk of fs.createReadStream('input.csv') {
currentBytes += chunk.length;
if (currentBytes > 32000) { // or whatever limit you want
currentFile.end(); // probably wait for the allback here
currentBytes = 0;
currentFile = fs.createWriteStream(`${++currentFileIndex}.csv`)
}
await util.promisify(cb => currentFile.write(chunk, cb)();
}
})();
关于javascript - 如何使用 JavaScript 对字符串进行分块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65180741/