我需要从文本文件创建一个CSV文件,其中包含有关我的通话的结算数据。我的文本文件的结构如下:
01.02.2016 10:35:49 8998775 New York 3:35 0,00 0,00
我使用以下方法创建CSV:
require 'csv'
@calls = File.new("modified_billing", "r")
CSV.open("new.csv", 'wb', write_headers: true,
headers: ["Date", "Time", "Phone number","City","Duration", "Cost", "Cost of call"]) do |csv|
@calls.each do |call|
csv << call.split(" ")
end
end
它适用于名称唯一的城市,但显然不适用于“纽约”,“拉斯维加斯”等,因为它会在其中创建两个列。
我想您已经快知道了。这是不使用正则表达式的简单方法:
string = '01.02.2016 10:35:49 8998775 New York 3:35 0,00 0,00'
data = string.split(' ')
data.shift(3)
# => ["01.02.2016", "10:35:49", "8998775"]
data.pop(3)
# => ["3:35", "0,00", "0,00"]
data.join(' ')
# => "New York"
# putting it together
first, third, second = data.shift(3), data.pop(3), [data.join(' ')]
csv << first + second + third
更紧凑的东西,虽然更难阅读:
data = call.split(' ')
csv << [data.shift(3), data.pop(3)].insert(1, data.join(' ')).flatten
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句