1

CSV::TableRailsアプリケーションのオブジェクトを操作するメソッドを作成しました。CSV.read(file_path)メソッドを使用してファイルを読み取ります。ただし、アプリケーションロジックが変更され、ローカルファイルからではなく、URLから読み取られます。

open-urigemopenメソッドを使用してCSVファイルをロードできます。ただしStringIO、行の配列に解析できるオブジェクトが作成されますが、オブジェクトに変換できませんでしたCSV::Table

URLからCSVファイルを読み取り、それをオブジェクトに変換するにはどうすればよいCSV::Tableですか?既存のメソッドを保持しますか?

CSV.openメソッドで使用されている既存のメソッドを上書きすることを考えていますがCSV.read、それがどれほど安全かわかりません。助言がありますか?

4

2 に答える 2

1

次の関数は、を使用してファイルコンテンツを取得し、それをオブジェクトopen-uri に変換します。CSV::Table

require 'csv'
require 'open-uri'

def read_url
  # Get StringIO from URL using open-uri
  stringio = open(file_url)

  # Create a new CSV object from StringIO
  csvobj = CSV.new(stringio)

  # Create an array of rows from CSV object
  array_of_rows = csvobj.read

  # Separate header from values
  header = array_of_rows[0]
  aux = array_of_rows.length - 1
  values = array_of_rows[1..aux]

  # Create array of CSV::Row objects
  values_row = values.map { |row| CSV::Row.new(header, row) }

  # Create a CSV::Table object from array of CSV::Row
  CSV::Table.new(values_row)
end
于 2013-03-13T16:17:04.637 に答える
0

CSV.new(stringio)トリックを行う必要があります(詳細についてはドキュメントを参照してください)

編集:未テスト。それでも問題が解決しない場合は、CSV.generateを試してください

于 2013-03-13T13:21:04.807 に答える