Tag: csv

如何在Rails 4中将PDF转换为Excel或CSV

我搜索了很多。 除非在这里问这个,否则别无选择。 你们知道一个在线转换器,它有API或Gem / s,可以将PDF转换为Excel或CSV文件吗? 我不确定这里是否是最好的地方。 我的应用程序在Rails 4.2中。 PDF文件包含一个标题和一个大约10列的大表。 更多信息:用户通过表单上传PDF然后我需要抓取PDF解析为CSV并阅读内容。 我试着用PDF Reader Gem阅读内容,但结果并不乐观。 我用过: freepdfconvert.com/pdf-excel遗憾的是不提供API。 (我联系了他们) 样本PDF 这段代码将PDF转换为方便的文本。 gem: pdf-reader def self.parse reader = PDF::Reader.new(“pdf_uploaded_by_user.pdf”) reader.pages.each do |page| puts page.text end end 现在,如果您检查附加的PDF示例,您将看到一些字段可能为空,这意味着我无法将文本行与空格分开并将其放入数组中,因为我无法将数组映射到正确的领域。 谢谢。

如何使用Ruby从CSV中删除行

给定以下CSV文件,如何删除“foo”列中包含单词“true”的所有行? Date,foo,bar 2014/10/31,true,derp 2014/10/31,false,derp 我有一个有效的解决方案,但它需要制作一个辅助CSV对象csv_no_foo @csv = CSV.read(@csvfile, headers: true) #http://bit.ly/1mSlqfA @headers = CSV.open(@csvfile,’r’, :headers => true).read.headers # Make a new CSV @csv_no_foo = CSV.new(@headers) @csv.each do |row| # puts row[5] if row[@headersHash[‘foo’]] == ‘false’ @csv_no_foo.add_row(row) else puts “not pushing row #{row}” end end 理想情况下,我会从CSV中删除违规行,如下所示: … if row[@headersHash[‘foo’]] == ‘false’ @csv.delete(true) #Doesn’t work … 看一下ruby文档,看起来row类有一个delete_if函数。 […]

Ruby 1.9.2 – 读取并解析远程CSV

我正在寻找一种方法来本地读取和解析远程CSV(托管在特定网站上)。 我在互联网上发现了一些有趣的例子,它们使用了FasterCSV,在ruby 1.9.2中已经合并为CSV。 我发现你可以用这种方式使用gems’csv’和’open-uri’来读取远程CSV: require ‘csv’ require ‘open-uri’ def read(url) open(url) do |f| f.each_line do |l| CSV.parse(l) do |row| puts row end end end end 但是当我调用这个函数时,我得到一个例外: ERROR IOError: closed stream 谁能解释我为什么? 有什么不对的吗? 我应该选择其他方法来阅读远程CSV吗? 更新 我到目前为止找到的最佳解决方案是: def read(url) data = [] begin open(url) do |f| data = CSV.parse f end rescue IOError => e # Silently […]

计算CSV文件的长度(行数)?

我有一个表单(Rails),它允许我使用file_field加载.csv文件。 在视图中: {:multipart => true}) do |f| %> 单击“提交”会将我重定向到另一个页面(create.html.erb)。 文件加载正常,我能够在第二页中正确读取内容。 我试图在第二页中显示.csv文件中的行数。 我的控制器(半伪代码): class UpcsvController < ApplicationController def index end def create file = params[:upcsv][:filename] … #params[:upcsv][:file_length] = file.length # Show number of lines in the file #params[:upcsv][:file_length] = file.size … end end 当我的文件只包含7 file.length , file.length和file.size返回’91’。 从我读过的Rails文档中,单击Submit按钮后,Rails会创建上传文件的临时文件,而params[:upcsv][:filename]包含temp / uploaded文件的内容,而不是路径文件。 我不知道如何提取原始文件中的行数。 获取文件中行数的正确方法是什么? 我的create.html.erb: File length: 我是Rails的新手(上周刚刚开始),所以请忍受我的愚蠢问题。 […]

Ruby CSV解析带有转义引号的字符串

我的CSV文件中有一行包含一些转义引号: 173,”Yukihiro \”The Ruby Guy\” Matsumoto”,”Japan” 当我尝试解析Ruby CSV解析器时: require ‘csv’ CSV.foreach(‘my.csv’, headers: true, header_converters: :symbol) do |row| puts row end 我收到此错误: …/1.9.3-p327/lib/ruby/1.9.1/csv.rb:1914:in `block (2 levels) in shift’: Missing or stray quote in line 122 (CSV::MalformedCSVError) 我怎样才能解决这个错误?

Rails 3,导入前检查CSV文件编码

在我的应用程序(Rails 3.0.5,Ruby 1.8.7)中,我创建了一个导入工具来从文件导入CSV数据。 问题:我要求我的用户以UTF-8编码从Excel导出CSV文件,但他们大部分时间都不会这样做。 如何在导入前validation文件是否为UTF-8? 否则导入将运行,但会产生奇怪的结果。 我使用FasterCSV导入。 错误的CSV文件的例子: ;VallÈe du RhÙne;CÙte Rotie; 谢谢。

如何强制Ruby的CSV输出中的一个字段用双引号括起来?

我正在使用Ruby的内置CSV生成一些CSV输出。 一切正常,但客户希望输出中的name字段包含双引号,因此输出看起来像输入文件。 例如,输入看起来像这样: 1,1.1.1.1,”Firstname Lastname”,more,fields 2,2.2.2.2,”Firstname Lastname, Jr.”,more,fields CSV的输出是正确的,如下所示: 1,1.1.1.1,Firstname Lastname,more,fields 2,2.2.2.2,”Firstname Lastname, Jr.”,more,fields 我知道CSV正在做正确的事情,因为它没有引用第三个字段只是因为它嵌入了空白,并且当它有嵌入的逗号时用双引号包装字段。 我想做的是,帮助客户感到温暖和模糊,告诉CSV总是双引号第三个字段。 我尝试在我的to_a方法to_a双引号包装字段,这会创建一个传递给CSV的”Firstname Lastname”字段,但是CSV嘲笑我的小人类尝试并输出”””Firstname Lastname””” 。 这是正确的做法,因为它正在逃避双引号,所以这不起作用。 然后我尝试在open方法中设置CSV’s :force_quotes => true ,输出双引号按预期包装所有字段,但客户不喜欢,我也是这样。 所以,这也没有用。 我查看了Table和Row文档,似乎没有任何东西可以让我访问“生成字符串字段”方法,或者设置“for field n always use quoting”标记的方法。 我即将潜入消息来源,看看是否有一些超级秘密的调整,或者是否有一种方法来修补CSV并弯曲它以实现我的意愿,但是想知道是否有人有一些特殊的知识或者遇到过这个问题之前。 而且,是的,我知道我可以滚动自己的CSV输出,但我更喜欢不重新发明经过良好测试的轮子。 而且,我也知道FasterCSV; 这是我正在使用的Ruby 1.9.2的一部分,因此明确使用FasterCSV并没有什么特别之处。 另外,我没有使用Rails并且无意在Rails中重写它,所以除非你有一个可爱的方法使用一小部分Rails实现它,所以不要打扰。 我会低估任何使用这些方法的建议,因为你没有费心去读这篇文章。

CSV – 未加引号的字段不允许\ r或\ n(第2行)

尝试解析CSV文件,但仍然收到错误消息未引用字段不允许\ r或\ n(第2行)。 。 我在这里找到了类似的主题,这里有一个提示: CSV.open(‘file.csv’, :row_sep => “\r\n”) do |csv| 但不幸的是他没有用…我无法更改CSV文件,所以我需要在代码中修复它。 编辑 CSV文件样本: A;B;C 1234;… 有什么办法吗? 非常感谢!

在Ruby中,如何从CSV文件中逐列读取数据?

我知道它是如何按行完成的 CSV.foreach(filename.csv) do |row| puts “#{row}” end 但我完全失去了专栏?

在Ruby中读取CSV的最佳方法。 FasterCSV?

我有一个CSV文件,我想用Ruby读取并创建Ruby对象以插入带有Active Record的MySQL数据库。 最好的方法是什么? 我看到两个明确的选项: FasterCSV和Ruby核心CSV 。 哪个更好? 我错过了更好的选择吗? 编辑:Gareth说使用FasterCSV,那么使用FasterCSV读取CSV文件的最佳方法是什么? 查看文档,我看到称为parse , foreach , read , open ……它说foreach “是作为读取CSV文件的主要界面。” 所以,我想我应该使用那个?