Tag: csv

如何在Rails中解析CSV时更改编码

我想知道如何在导入和解析CSV文件时更改CSV文件的编码。 我有这个代码: csv = CSV.parse(output, :headers => true, :col_sep => “;”) csv.each do |row| row = row.to_hash.with_indifferent_access insert_data_method(row) end 当我读取我的文件时,我收到此错误: Encoding::CompatibilityError in FileImportingController#load_file incompatible character encodings: ASCII-8BIT and UTF-8 我读到了关于row.force_encoding(‘utf-8′)但它不起作用: NoMethodError in FileImportingController#load_file undefined method `force_encoding’ for # 谢谢。

Ruby 1.9.2导出CSV字符串而不生成文件

我根本无法获得文档中 “写入” 示例下的“To a String”示例。 ruby -v返回:ruby 1.9.2p290(2011-07-09修订版32553)[x86_64-darwin10.8.0] 我无法工作的文档中的示例如下: csv_string = CSV.generate do |csv| csv << ["row", "of", "CSV", "data"] csv << ["another", "row"] end 我得到的错误是: wrong number of arguments (0 for 1) 所以看起来我错过了一个论点,在这里的文档中它指出: This method wraps a String you provide, or an empty default String 但是当我传入一个空字符串时,它会给我以下错误: No such file or directory – 我不打算生成一个csv文件,我只是想创建一个csv字符串,我将其作为文本发送给用户。

从CSV导入CSV小块记录(ruby on rails)

我需要导入一个大的CSV文件,细分为每隔X小时导入的小块。 我做了以下rake任务 task :import_reviews => :environment do require ‘csv’ CSV.foreach(‘reviews.csv’, :headers => true) do |row| Review.create(row.to_hash) end end 使用heroku调度程序我可以让这个任务每天运行,但我想在几个块中分解它,例如每天100条记录: 这意味着我需要跟踪导入的最后一行,并在下次让rake任务运行时从该行+ = 1开始,我该如何实现? 提前致谢!

RUBY CSV计算回报

我想计算2天的公司名单回报。 所有信息都以CSV格式保存。 结构如下:第一列是公司名称,第二列是日期,第三列是价格,第四列是return = p(t + 2)/ p(t)。 (1)CSV为1.8G。 使用“CSV.each_with_index ..”非常慢。 如果我使用“CSV.foreach”,它不会让我在两天内找到价格。 (2)价格缺失值。 因此,即使我使用CSV.each_with_index,i + 2也可能无法确定正确的日期。 谢谢你的帮助。 输入: [ [‘a’, ‘2014-6-1’, ‘1’], [‘a’, ‘2014-6-2’, ‘2’], [‘a’, ‘2014-6-4’, ‘3’], [‘a’, ‘2014-6-5’, ‘4’], [‘b’, ‘2014-6-1’, ‘1’], [‘b’, ‘2014-6-2’, ‘2’], [‘b’, ‘2014-6-3’, ‘3’], [‘b’, ‘2014-6-4’, ‘4’], [‘b’, ‘2014-6-5’, ‘5’] ] 输出: [ [‘a’, ‘2014-6-1’, ‘1’, ”], # Missing […]

使用Ruby上载文件字符集转换

我有一个应用程序,我们让客户上传一个csv文件到我们的服务器。 然后我们处理并将来自csv的数据放入我们的数据库中。 我们遇到了一些char-sets的问题,特别是当我们处理JSON时,特别是一些非转换的UTF-8字符在JSON响应上打破了IE。 有没有办法在我们开始处理之前将上传的csv文件转换为UTF-8? 有没有办法确定上传文件的字符编码? 我玩过iconv但我们并不总是确定上传文件的编码方式。 谢谢。

delayed_job:使用handle_asynchronously时出现’undefined method’错误

我正在尝试使用delayed_job在我的rails数据库中运行更大的csv导入。 这是我的控制器和模型方法: 控制器方法 def import InventoryItem.import(params[:file], params[:store_id]) redirect_to vendors_dashboard_path, notice: “Inventory Imported.” end 模型方法 def self.import(file, store_id) CSV.foreach(file.path, headers: true) do |row| inventory_item = InventoryItem.find_or_initialize_by_upc_and_store_id(row[0], store_id) inventory_item.update_attributes(:price => row.to_hash[“price”], :updated_at => “#{Time.now}”) end end handle_asynchronously :import 我已将’delayed_job’和’daemons’添加到我的gemfile中,然后捆绑。 运行生成器,使用rake jobs:work启动开发工作进程rake jobs:work ,然后尝试通过应用程序运行导入。 这是我得到的错误: Routing Error undefined method `import’ for class `InventoryItem’ 在整合delayed_job时我错过了什么吗? 这个导入过程之前运行得很好,所以只是想知道我搞砸了哪里。 提前致谢!

从类似CSV的文件创建哈希

我有一个产品文件,列出了商品#,产品和价格。 我想阅读这个文件并将其初始化为哈希,项目#是关键,产品和价格是价值。 这是我的档案 199, Shoes, 59.99 211, Shirts, 19.99 245, Hats, 25.99 689, Coats, 99.99 712, Beanies, 6.99 我希望它看起来像这样。 products = { 199 =>[‘Shoes’, 59.99], 211 =>[‘Shirts’, 19.99], 245 =>[‘Hats’, 25.99], 689 => [‘Coats’, 99.99], 712 => [‘Beanies’, 6.99] } 这就是我能提出的并不是它真正想要的东西。 products_file = File.open(“files.txt”) products_hash = [] while ! products_file.eof? product_hash = products_file.gets.chomp print product_hash.split(‘, […]

使用Ruby CSV标头转换器

说我有以下课程: class Buyer < ActiveRecord::Base attr_accesible :first_name, :last_name 以及CSV文件中的以下内容: First Name,Last Name John,Doe Jane,Doe 我想将CSV的内容保存到数据库中。 我在Rake文件中有以下内容: namespace :migration do desc “Migrate CSV data” task :import, [:model, :file_path] => :environment do |t, args| require ‘csv’ model = args.model.constantize path = args.file_path CSV.foreach(path, :headers => true, :converters => :all, :header_converters => lambda { |h| h.downcase.gsub(‘ ‘, ‘_’) […]

Ruby CSV标头不在第一行

我想用(headers:true选项)读取CSV文件,但我文件的前5行包含不需要的数据。 所以我希望第6行成为标题并开始用第6行读取文件。 但是当我读取文件CSV.readlines(“my_file.csv”, headers: true).drop(5) ,它仍然使用第1行作为标题。 如何将第6行设置为标题?

Ruby中的通用换行支持,包括\ r(CR)行结尾

在Rails应用程序中,我接受并解析可能使用三种可能的行终止字符格式化的CSV文件: \n ( LF ), \r\n ( CR+LF )或\r ( CR )。 Ruby的File和CSV库似乎可以很好地处理前两种情况,但最后一种情况(“Mac classic” \r行结尾)不作为换行处理。 能够接受这种格式以及其他格式非常重要,因为Microsoft Excel for Mac(在OS X上运行)似乎在导出到“逗号分隔值”时使用它(尽管导出到“Windows逗号分隔”使得更容易处理\r\n )。 Python具有“通用换行支持”,可以毫无问题地处理这三种格式中的任何一种。 在Ruby中是否有类似的东西可以在不事先知道格式的情况下接受所有三个?