Tag: csv

使用ruby CSV模块导入csv文件时出现问题

我正在尝试使用Ruby的csv模块将csv文件中包含的记录导入到Ruby on Rails 3应用程序中的本地表中。 该表是通过创建模型Movie创建的。 这是我在控制台中执行的操作: require ‘csv’ CSV.foreach(‘public/uploads/VideoTitles2.csv’) do |row| record = Movie.new( :media_format => row[0], :title => row[1], :copies_at_home => row[2], :order => row[3] ) record.save end csv文件的行匹配(在数据类型中)它们传入的列。 这是我尝试导入的csv文件(VideoTitles2.csv)的缩短版本: “DVD”,”LEAP OF FAITH”,1,1 “DVD”,”COCOON”,1,2 “DVD”,”TITANIC”,1,3 每个记录用\ n分隔的地方我相信。 此csv文件是从Access导出的,其原始文件扩展名为.txt。 为了导入,我手动将其更改为.csv。 问题是,在rails控制台中执行上面的行后,我得到以下输出: => nil 导入似乎没有发生。 如果有人知道如何解决这个问题,我真的很感激。

Ruby CSV不会在带引号的字符串中读取逗号格式的数字

我在Rails应用程序中使用ruby的CSV类(ruby 2.1.5)来加载上传的csv文件中的记录。 用户使用“另存为”从Excel创建csv文件,并且根据数字的格式,它们可能会保存为带引号的带引号的字符串 – 在这种情况下,删除逗号后的数字部分。 如果输入值为”3,500″ ,则应保存3500 ,而不是3 。 我意识到可以在Excel中清理它,但它似乎也应该易于处理(如果我必须告诉他们程序无法处理这个基本情况,我会从用户那里得到一个主要的WTF。 )此外,由于csv文件的标题与数据库中的列名匹配,我不必编写特定于列的处理程序 – 我只是进行属性赋值。 我希望保持这种方式,因为我有比我在我的例子中包括的更多受影响的列。 输入记录: recordid,valcurrent,valdate 11015,”3,500″,6/7/2013 处理function def import_csv(file) CSV.foreach(file.path, headers: true, header_converters: :symbol, skip_blanks: true, converters: :all) do |row| # hash the input row row_hash = row.to_hash # create a new row with the hash in original_record fl = self.forecast_lines.create(original_record: row_hash.to_s) # write […]

Rails – 在PostgreSQL中将CSV条目导入为数组

我正在使用Ruby on Rails rake任务将.csv文件导入我的PostgreSQL数据库。 我的代码供参考,如下: require ‘csv’ namespace :db do desc “Populate database” task populate_database: :environment do CSV.foreach(“db.csv”, :headers => true) do |row| Sale.create!(row.to_hash) end end end 在.csv文件中,我有一个格式为“cat; dog; foo; bar”的条目。 现在,这个条目被导入到PostgreSQL中作为“文本”(即数据类型)。 但是,我希望将文本拆分为“;”,并将拆分结果作为文本数组存储在PostgreSQL中。 我该怎么做呢? 编辑澄清: 我的数据看起来像这样: column 1 | column 2 | column 3 row 1 John | Jack; Carol | Seth; Annie; Doug row […]

在Rails中导入CSV – UTF-8中的非英文字符无效字节序列

我正在使用CSVMapper Gem将CSV文件中的一些记录导入到Rails 3模型中。 (我使用这个gem因为它是我发现的最简单的方法) 无论如何,我用来导入记录的代码如下: r = import(‘doc/socios_full.csv’) do map_to Associate after_row lambda{|row, associate| associate.save } start_at_row 1 [group,member,family_relationship_code,family_relationship_description,last_name,names,…] #The previous line is actually longer, with more atts, but it’s been cut to explain the example end 并且它工作得非常好,除非解析器遇到一些非英语字符,如ó, é, ñ, í, °… 那时我得到以下错误: ArgumentError: invalid byte sequence in UTF-8 from /home/bcb/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/csv.rb:1831:in `sub!’ from /home/bcb/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/csv.rb:1831:in `block […]

在rails中将数据导出为CSV

我需要在rails appl中将导出数据作为CSV。 我找到了这个插件: https : //github.com/crafterm/comma 。 你知道一些更好的解决方案吗?

Rails – 无法从CSV文件导入数据

我正在尝试从CSV文件导入数据,我不想保存文件。 我在这里找到了一个类似的问题: Ruby on Rails – 从CSV文件导入数据 但是,当我尝试使用此解决方案时,我收到错误。 我的表格如下: Import a CSV file Submit 在新页面上,此表单的提交调用create操作,然后create action调用该行: Product.import(params[:file]) 我的模型中有以下导入方法: def self.import(myfile) require ‘csv’ csv_text = File.read(myfile) csv = CSV.parse(csv_text, :headers => true) csv.each do |row| end end 其中’myfile’是params [:file]。 我知道我还没有对数据做任何事情。 我遇到行csv_text = File.read(myfile)的错误,这是:没有这样的文件或目录@ rb_sysopen – X.csv 在寻找我见过的解决方案时,使用了.path。 如果我将此行更改为csv_text = File.read(myfile.path)我会收到错误:“X.csv”的未定义方法`path’:String 有人可以帮忙吗? 我觉得我必须非常接近解决方案,但我只是在这两个错误之间四处走动。 是否有可能从csv获取数据而不先保存它? 谢谢你的时间

Rails 4 CSV导入值并将值设置为键值

我是一个完整的Rails n00b,我确信这是一件容易的事,但我遇到了麻烦。 我想在我的URL中获取密钥的值,并将其设置为我的数据库中记录的:category_id,因为我从csv导入该记录。 我可以通过在我的csv文件中创建category_id字段并使用以下代码导入文件来使其工作 def self.import(file) CSV.foreach(file.path, headers: true) do |row| record = Manufacturer.where(:category_id => row[1], :name => row[0] ).first_or_create record.save! end end 但是这需要将category_id添加到csv ..我想要做的就是这样 def self.import(file) CSV.foreach(file.path, headers: true) do |row| record = Manufacturer.where(:category_id => @category, :name => row[0] ).first_or_create record.save! end end 其中@category在URL中设置。 类似于:… localhost:3000 / manufacturers / import_manufacturer / 2?category_id = 2这保存了我的记录但是将类别id设置为“null” […]

将CSV导入添加到ROR应用程序

我在在线订购应用程序中为批量订单添加了CSV导入。 基本上我要做的是用CSV数据创建一个购物车。 我创建了一个imports_controller: require ‘csv’ class ImportsController < ApplicationController def csv_import num_imported = 0 num_failed = 0 CSV.foreach(params[:dump][:file].csv) do |row| c = CsvImport.new( cart_items: row[1], cart_items_quantity: row[2], cart_items_price: row[3], cart_items_description: row[4], cart_items_upc: row[5], cart_items_sku: row[6] ) if c.save num_imported += 1 else num_failed += 1 end end flash.now[:message] = "CSV Import Successful, #{num_imported} new records […]

启用local-infile,将数据从rails加载到远程mysql

我使用connection_ninja( https://github.com/cherring/connection_ninja )从我的rails应用程序连接到远程mysql数据库。 我的模型中有一个方法,它使用’load data local infile ..’从运行我的rails app的服务器加载一个csv文件到远程mysql db。 代码如下: class Product < ActiveRecord::Base @conn = use_connection_ninja(:rl_op) self.table_name = 'RlProduct' def self.update(file_path) sql = "LOAD DATA LOCAL INFILE '#{file_path}' INTO TABLE RlProduct FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' (name,price,productId)" @conn.connection().execute(sql) end end 这给了我以下错误: Mysql2::Error: The used command is not […]

Rails 3:如何在没有模板文件的情况下响应csv?

我有一个具有to_csv方法的对象,我想将它传递给respond_with以从我的控制器渲染csv。 我的代码如下所示: class Admin::ReportsController < AdminController respond_to :csv def trips respond_with TripReport.new end end TripReport的实例具有to_csv方法。 当我向该操作发出请求时,我收到以下错误: ActionView::MissingTemplate (Missing template admin/reports/trips with {:formats=>[:csv], :handlers=>[:erb, :builder, :rjs, :rhtml, :rxml], :locale=>[:en, :en]} in view paths 所以看起来控制器正在寻找要渲染的模板文件。 我怎么能绕过这个? 我宁愿csv格式以与json类似的方式响应,所以它在对象上调用to_csv并只渲染输出,这可能吗?