如何在Ruby中从文本文件创建CSV

Jes*_*Jes 3 ruby csv

我需要从文本文件中创建一个CSV文件,其中包含有关我的呼叫的计费数据.我的文本文件有如下结构:

01.02.2016 10:35:49 8998775 New York 3:35 0,00 0,00
Run Code Online (Sandbox Code Playgroud)

我使用以下方法创建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
Run Code Online (Sandbox Code Playgroud)

它适用于具有单一名称的城市,但显然它不适用于"纽约","拉斯维加斯"等,因为它创建了两列.

Dam*_*che 6

我想你差不多了.这是一种没有正则表达式的简单方法:

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
Run Code Online (Sandbox Code Playgroud)

更紧凑的东西,虽然有点难读:

data = call.split(' ')
csv << [data.shift(3), data.pop(3)].insert(1, data.join(' ')).flatten
Run Code Online (Sandbox Code Playgroud)

  • 非常好!你应该为OP添加最后一步,将它拉到一起......`first = data.shift(3); third = data.pop(3); second = [data.join('')]; csv <<第一+第二+第三` (2认同)