javascript - Javascript:将长 CSV 字符串拆分为字符串数组而不会丢失值
问题描述
我正在尝试为我认为可以通过 JavaScript 解决但无法概念化解决方案并需要一些帮助的 SQL 问题找到解决方案。我有一个长字符串(118.0000000000,102.6666666666,110.6666666666,97.5000000000,82.5000000000,86.6666666666 .... 15000 characters long)
,我需要将其分解为 4000 的最大字符串长度(SQL NVARCHAR(max) 限制)并将字符串迭代到存储的 proc 以进行进一步处理。假设使用上面的字符串,我想将字符串拆分为 35 个字符长度但不丢失数据并在第 35 个字符之前的最后一个“,”处终止新字符串并从该点开始构建下一个字符串,所以基本上字符串看起来像这样:
118.0000000000,102.6666666666
110.6666666666,97.5000000000
82.5000000000,86.6666666666
我试图查看已经提出的与拆分字符串相关的所有解决方案,但无法提取可能导致在这里解决我的问题的信息。感谢所有的帮助!
解决方案
如果您的字符串真的很长,那么手动使用索引可能会更快,而不是将所有内容分解为数组 - 它的可读性并没有降低很多。为此,您只需在每个循环中查看超过 35 个字符的逗号,将部分移至最后一个逗号并将位置重置为逗号加 1 的位置。如果您没有剩余 35 个字符,只需添加最后一个位并停止。
function splitGroups(str, MAX) {
let res = []
let start = 0
while (start < str.length) {
if (str.length - start <= 35) {
res.push(str.slice(start))
break
}
let c = str.slice(start, str.indexOf(',', start + MAX + 1))
let end = c.lastIndexOf(',')
res.push(c.slice(0, end))
start += end + 1
}
return res
}
let str = "118.0000000000,102.6666666666,110.6666666666,97.5000000000,82.5000000000,86.6666666666"
let groups = splitGroups(str, 35)
console.log(groups)
console.log("lengths", groups.map(s => s.length) )
推荐阅读
- scala - 在 Spark 中连接 Maptype 值时如何处理空值
- php - 如何从搜索栏中获取数据并将其保存在 mysql 数据库中
- excel - 如何使用波斯标题行解决 adodb 查询错误?
- java - 放心响应 - 验证匹配相同路径的节点
- python - 如何获取嵌套列表python中特定元素的计数
- gitlab - v13->v14升级后的Gitlab Pages 502问题
- powerbi - Power BI 中按列分组的行之间的差异
- azure-sql-database - 具有 Azure SQL 数据库和 MySQL 数据库的 Azure 弹性池
- python - 在 ktrain 包中使用 Bert 时出现 SSLCertVerificationError
- android - 更好地使用空视图或隐藏现有视图?