gpt4 book ai didi

Ruby:使用数组列表来选择特定列

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

我是 Ruby 新手。在这里脚本,我想在第 10 行使用选择器而不是字段 [0] 等...我该怎么做?

例如,数据是嵌入的。如果我在打开或写入文件或其他任何东西时做错了,请不要犹豫纠正我,我喜欢学习。

#!/usr/bin/ruby

filename = "/tmp/log.csv"

selector = [0, 3, 5, 7]

out = File.open(filename + ".rb.txt", "w")
DATA.each_line do |line|
fields = line.split("|")
columns = fields[0], fields[3], fields[5], fields[7]
puts columns.join("|")
out.puts(columns.join("|"))
end
out.close


__END__
20180704150930|rtsp|645645643|30193|211|KLM|KLM00SD624817.ts|172.30.16.34|127299264|VERB|01780000|21103|277|server01|OK
20180704150931|api|456456546|30130|234|VC3|VC300179201139.ts|172.30.16.138|192271838|VERB|05540000|23404|414|server01|OK
20180704150931|api|465456786|30154|443|BAD|BAD004416550.ts|172.30.16.50|280212202|VERB|04740000|44301|18|server01|OK
20180704150931|api|5437863735|30157|383|VSS|VSS0011062009.ts|172.30.16.66|312727922|VERB|05700000|38303|381|server01|OK
20180704150931|api|3453432|30215|223|VAE|VAE00TF548197.ts|172.30.16.74|114127126|VERB|05060000|22305|35|server01|OK
20180704150931|api|312121|30044|487|BOV|BOVVAE00549424.ts|172.30.16.58|69139448|VERB|05300000|48708|131|server01|OK
20180704150931|rtsp|453432123|30127|203|GZD|GZD0900032066.ts|172.30.16.58|83164150|VERB|05460000|20303|793|server01|OK
20180704150932|api|12345348|30154|465|TYH|TYH0011224259.ts|172.30.16.50|279556843|VERB|04900000|46503|241|server01|OK
20180704150932|api|4343212312|30154|326|VAE|VAE00TF548637.ts|172.30.16.3|28966797|VERB|04740000|32601|969|server01|OK
20180704150932|api|312175665|64530|305|TTT|TTT000000011852.ts|172.30.16.98|47868183|VERB|04740000|30501|275|server01|OK

最佳答案

您可以使用 Ruby's splat operator 在特定索引处获取 字段 (搜索“splat”)和 Array.values_at像这样:

columns = fields.values_at(*selector)

一些编码风格建议:

1.您可能希望将 selector 设为常量,因为您不太可能希望在代码库中进一步改变它

2. outout.close 以及附加到DATA 都可以压缩成一个CSV.open :

CSV.open(filenname, 'wb') do |csv|
columns.map do |col|
csv << col
end
end

您还可以将自定义分隔符(在您的情况下为管道 |)指定为 noted in this answer像这样:

...
CSV.open(filenname, 'wb', {col_sep: '|') do |csv|
...

关于Ruby:使用数组列表来选择特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51309618/

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