gpt4 book ai didi

arrays - Ruby String Split on "\t"丢失 "\n"

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:39 24 4
gpt4 key购买 nike

\t尝试拆分此制表符分隔的数据集:

171 1000    21  
269 1000 25
389 1000 40
1020 1-03 30 1
1058 1-03 30 1
1074 1-03 30 1
200 300 500

(为清楚起见:)

171\t1000\t21\t\n   
269\t1000\t25\t\n
389\t1000\t40\t\n
1020\t1-03\t30\t1\n
1058\t1-03\t30\t1\n
1074\t1-03\t30\t1\n
200\t300\t\t500\n

a = text.split(/\n/)
a.each do |i|
u = i.split(/\t/)
puts u.size
end

==>
3
3
3
4
4
4
4

\t\n 组合似乎去掉了最后一个\t,我需要它来进一步输入。我该如何解决这个问题?干杯

编辑:这是我所期待的:

4
4
4
4
4
4
4

最佳答案

如果这是用于生产,您应该使用 CSV class正如@DmitryZ 在评论中指出的那样。 CSV 处理有很多警告,您不应该手动处理。

但让我们把它作为练习来完成......


问题是拆分不保留定界符,也不保留尾随的空列。您已经解决了这两个问题。

当您运行 a = text.split(/\n/) 时,a 的元素没有换行符。

a = [
171\t1000\t21\t
269\t1000\t25\t
389\t1000\t40\t
1020\t1-03\t30\t1
1058\t1-03\t30\t1
1074\t1-03\t30\t1
200\t300\t\t500
]

然后,as documented in String#split ,“如果省略限制参数,则抑制尾随空字段。”,因此 u = i.split(/\t/) 将忽略最后一个字段 除非你给它一个限制。

如果您知道它总是有 4 个字段,则可以使用 4。

u = i.split(/\t/, 4)

但使用 -1 可能更灵活,因为“如果 [限制] 为负数,则返回的字段数没有限制,并且不会抑制尾随空字段。”所以这将保留空字段,而无需硬编码 CSV 中的列数。

u = i.split(/\t/, -1)

关于arrays - Ruby String Split on "\t"丢失 "\n",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40895089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com