-1

これは私にとってとてもうまくいきます。

lines = CSV.readlines("log.csv")
a = lines.map{|s| {timestamp: s[0], url: s[1], ip: s[3]} }
puts a

より明確に修正。

lines = CSV.readlines("log.csv").map do |s|
  s = {timestamp: s[0], url: s[1], ip: s[3]}
end
puts a

しかし、grep を使用して追加のフィルタリングを行うことを検討していますが、これは惨めに失敗します。

1.9.3-p448 :129 > lines = File.readlines("log.csv").grep(/watch\?v=/)
 => [] 
1.9.3-p448 :134 > lines.map{|s| {timestamp: s[0], url: s[1], ip: s[3]} }
=> [{:timestamp=>"\"", :url=>"2", :ip=>" "}, {:timestamp=>"\"", :url=>"2", :ip=>" "}

解決

a = File.readlines('log.csv').grep(/watch\?v=/).map do |s|
  s = s.parse_csv;
  { timestamp: s[0], url: s[1], ip: s[3] }
end
puts a

ありがとう。

4

1 に答える 1

2

クラスはメソッドを にCSV追加します。したがって、このようにファイルレコードを一度に1つずつ解析できますparse_csvString

lines = File.readlines("log.csv").grep(/watch\?v=/)
a = lines.map{ |s| s = s.parse_csv; {timestamp: s[0], url: s[1], ip: s[3]} }
puts a

または、できれば

a = File.readlines('log.csv').grep(/watch\?v=/).map do |s|
  s = s.parse_csv;
  { timestamp: s[0], url: s[1], ip: s[3] }
end
puts a
于 2013-08-14T13:38:47.330 に答える