2013-01-21 16 views
11

刪除空格我有多餘的空格的字符串:在CSV文件

First,Last,Email ,Mobile Phone ,Company,Title ,Street,City,State,Zip,Country, Birthday,Gender ,Contact Type 

我要分析此行,並刪除空格。

我的代碼如下所示:

namespace :db do 
task :populate_contacts_csv => :environment do 

require 'csv' 

csv_text = File.read('file_upload_example.csv') 
    csv = CSV.parse(csv_text, :headers => true) 
    csv.each do |row| 
     puts "First Name: #{row['First']} \nLast Name: #{row['Last']} \nEmail: #{row['Email']}" 
    end 
    end 
end 

回答

1

您可以strip您的哈希第一:

csv.each do |unstriped_row| 
    row = {} 
    unstriped_row.each{|k, v| row[k.strip] = v.strip} 
    puts "First Name: #{row['First']} \nLast Name: #{row['Last']} \nEmail: #{row['Email']}" 
end 

編輯剝離哈希鍵太

+1

這不行。 「電子郵件」的標題不是「電子郵件」,導致代碼找不到值。 –

+0

對!條紋鑰匙,謝謝 –

+0

謝謝,它適合我! – xdsemx

2

CSV支持的headersfields 「轉換器」 ,它可以讓您在傳遞到您的each循環之前進入數據。

寫一個CSV文件示例:

csv = "First,Last,Email ,Mobile Phone ,Company,Title ,Street,City,State,Zip,Country, Birthday,Gender ,Contact Type 
first,last,email ,mobile phone ,company,title ,street,city,state,zip,country, birthday,gender ,contact type 
" 
File.write('file_upload_example.csv', csv) 

以下是我會做:

require 'csv' 
csv = CSV.open('file_upload_example.csv', :headers => true) 
[:convert, :header_convert].each { |c| csv.send(c) { |f| f.strip } } 

csv.each do |row| 
    puts "First Name: #{row['First']} \nLast Name: #{row['Last']} \nEmail: #{row['Email']}" 
end 

,輸出:

First Name: 'first' 
Last Name: 'last' 
Email: 'email' 

該轉換器只需除去開頭或結尾的空白從每個標題和每個字段中讀取文件。

此外,作爲編程設計選擇,不要使用讀你的文件到內存:

csv_text = File.read('file_upload_example.csv') 

然後對其進行分析:

然後在它的循環:

csv.each do |row| 

Ruby的IO系統支持逐行掃描文件。一旦我的代碼執行CSV.open該文件是可讀的,each讀取每一行。整個文件不需要一次存儲在內存中,這是不可擴展的(儘管在新機器上它變得更加合理),並且如果測試的話,您會發現使用each讀取文件非常重要快,可能與閱讀它一樣快,解析它然後遍歷解析的文件。

+0

不知道轉換,很酷的東西 –

35
@prices = CSV.parse(IO.read('prices.csv'), :headers=>true, 
    :header_converters=> lambda {|f| f.strip}, 
    :converters=> lambda {|f| f ? f.strip : nil}) 

的零測試被添加到該行而不是標題轉換器假設報頭從不NIL,而數據可能是,和nil不具有條法。我真的很驚訝,AFAIK:strip不是預定義的轉換器!

+0

爲我工作,謝謝 –

+0

太好了,謝謝! :) – ssuljic

+0

不錯,這應該是被接受的答案! – Sujimichi