Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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:在不丢失值的情况下将长CSV字符串拆分为字符串数组_Javascript_Arrays_Nvarchar - Fatal编程技术网

Javascript:在不丢失值的情况下将长CSV字符串拆分为字符串数组

Javascript:在不丢失值的情况下将长CSV字符串拆分为字符串数组,javascript,arrays,nvarchar,Javascript,Arrays,Nvarchar,我正在尝试为一个SQL问题找到一个解决方案,我认为我可以通过JavaScript解决这个问题,但不能概念化解决方案,需要一些帮助。我有一个长字符串(118.0000000000 102.66666666 110.66666666 110.66666666,97.5000000000,82.5000000000,86.66666666…15000个字符长),我需要将其分解为最大字符串长度4000(SQL NVARCHAR(max)限制),并将字符串迭代到存储过程中以进行进一步处理。假设使用上面的字

我正在尝试为一个SQL问题找到一个解决方案,我认为我可以通过JavaScript解决这个问题,但不能概念化解决方案,需要一些帮助。我有一个长字符串
(118.0000000000 102.66666666 110.66666666 110.66666666,97.5000000000,82.5000000000,86.66666666…15000个字符长)
,我需要将其分解为最大字符串长度4000(SQL NVARCHAR(max)限制),并将字符串迭代到存储过程中以进行进一步处理。假设使用上面的字符串,我希望以35个字符的长度拆分字符串,但不会丢失数据,并在第35个字符之前的最后一个“,”处终止新字符串,并从该点开始构建下一个字符串,因此字符串基本上如下所示:

118.0000000000,102.6666666666 
110.6666666666,97.5000000000
82.5000000000,86.6666666666
我试图查看所有已经提供的与splliting string相关的解决方案,但未能提取可能导致解决我的问题的信息。感谢所有的帮助

使用
substr()
获取前35个字符,将其拆分为一个数组,然后删除数组的最后一个元素,因为它可能不是一个完整的数字

var csv = "118.0000000000,102.6666666666,110.6666666666,97.5000000000,82.5000000000,86.6666666666";
var csv35 = substr(csv, 0, 35);
var nums = csv35.split(",");
nums.length--;

如果我正确理解了您的问题,那么您希望在分隔符处将字符串拆分为预定最大字符长度的块。以下是一种功能性方法,允许您动态指定长度和分隔符:

const chunk=(maxLen,separator)=>data=>data.split(separator).reduce((chunk,v,i)=>{
const last=chunks.length-1;

如果(块[最后].length+separator.length+v.length如果字符串非常长,那么手动处理索引可能会比将所有内容分解为数组更快—可读性也不会差多少。为此,您只需在每个循环中向前看逗号超过35个字符,将部分保留到最后一个逗号,然后重置posi逗号加1的位置。如果没有剩下35个字符,只需添加最后一位并停止

函数拆分组(str,MAX){
让res=[]
让我们开始=0
while(开始如果(str.length-起始s.length))
太棒了!这就是我要找的。感谢你的帮助Patrick!因为你下面的答案使大字符串的性能更好,所以我将其标记为答案,但你的解决方案在性能方面并没有落后太多。再次感谢!@HarryGrewal很高兴你能够获得一个有效的解决方案,这才是最重要的t、 另一个伟大的解决方案!这也适用于我的解决方案。感谢帮助标记!使用大字符串时,您的解决方案更快,因此我将此标记为我的问题的答案。再次感谢!我投了赞成票。这肯定是一个比我的解决方案性能更高的解决方案,我当然承认。谢谢Barmar。下面提供的解决方案我的问题有一个更全面的解决方案,这就是为什么第三个答案被标记为答案的原因。感谢您在这方面花时间!