Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript对字符串进行分块_Javascript - Fatal编程技术网

如何使用javascript对字符串进行分块

如何使用javascript对字符串进行分块,javascript,Javascript,我有一个大于32kb的字符串,它需要分块,每个分块的大小限制为32kb。可能吗?使用JavaScript,我只能找到与我的任务无关的代码,比如剪切字符串或拆分字符串 stringChop = function(str, size){ if (str == null) return []; str = String(str); return size > 0 ? str.match(new RegExp('.{1,' + size + '}', 'g')) : [str]; } 我还有检查

我有一个大于32kb的字符串,它需要分块,每个分块的大小限制为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")
您确实不想“花时间”在节点中拆分大字符串

如果你要用香草的话 使用JavaScript完全可以做到这一点(您已经非常接近了)。尽管这在没有正则表达式和生成器的情况下更加优雅:

function*chunk(str,size=3){
对于(设i=0;i
如果可以使用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完全可以做到这一点(您已经非常接近了)。尽管这在没有正则表达式和生成器的情况下更加优雅:

function*chunk(str,size=3){
对于(设i=0;i
如果可以使用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)();
  }
})();

如果使用Node.js执行此操作,只需逐行读取输入文件,将这些动态块存储到缓冲区字符串中,一旦缓冲区大小达到限制,将其推到单独的文件中。@YevgenGorbunkov所以使用javascript不会起作用吗?我使用java从image base64 encode中获取字符串,然后将其发送到javascriptHere您将找到一些答案,在这里,如果您使用Node.js这样做,只需逐行读取输入文件,将这些动态块存储到缓冲区字符串中,一旦缓冲区的大小达到限制,将它推到单独的文件中。@YevgenGorbunkov那么使用javascript就不会起作用了?我使用java从image base64 encode中获取字符串,然后将其发送到javascriptHere,您将在这里找到一些答案,