Tag: csv

以CSV格式导出SQLite3表的内容

我有一个生成SQLite3数据库的Ruby脚本。 我希望能够生成包含其中一个数据库表的“output.csv”文件。 有没有办法在Ruby中处理它?

如何使用Ruby将列标题写入csv文件?

我在使用Ruby将列写入csv文件时遇到问题。 下面是我的代码片段。 calc = numerator/denominator.to_f data_out = “#{numerator}, #{denominator}, #{calc}” File.open(‘cdhu3_X.csv’,’a+’) do|hdr| hdr << ["numerator","denominator","calculation\n"] #< column header hdr << "#{data_out}\n" end 代码将列标题添加到每一行,我只需要在每列数据的顶部。 我在这里和其他地方搜索过,但无法找到明确的答案。 任何帮助将不胜感激。

如何有力地解析格式错误的CSV?

我正在处理政府来源(FEC,州选民数据库等)的数据。 它的格式不一致,这会以各种令人愉快的方式破坏我的CSV解析器。 它是外部采购和权威的。 我必须解析它,我不能重新输入,在输入时validation等。 就是这样; 我不控制输入。 属性: 字段包含格式错误的UTF-8(例如Foo \xAB bar ) 一行的第一个字段指定已知集合中的记录类型。 知道记录类型,您知道有多少字段及其各自的数据类型,但直到您知道。 文件中的任何给定行可能使用带引号的字符串( “foo”,123,”bar” )或不带引号( foo,123,bar )。 我还没有遇到任何在给定行中混合的地方(即”foo”,123,bar ),但它可能在那里。 字符串可以包括内部换行符,引号和/或逗号字符。 字符串可以包括逗号分隔的数字。 数据文件可能非常大(数百万行),因此需要仍然相当快。 我正在使用Ruby FasterCSV(在1.9中仅称为CSV),但这个问题应该与语言无关。 我的猜测是,解决方案需要使用明确的记录分隔符/引号字符(例如ASCII RS,STX)进行预处理替换。 我已经在这里开始了一点但它并不适用于我得到的一切。 如何可靠地处理这种脏数据? ETA:以下是单个文件中可能包含的简化示例: “此”, “是”,123, “一”, “正常”, “线” “行”,“带”“内部”,“引用” “短线”,“有 一个 “内部引用”,1个逗号和 换行符” un“quot”ed,text,with,1,2,3,numbers “引用”, “号码”, “系列”, “1,2,3” “无效\ xAB utf-8”

导入CSV报价错误让我感到疯狂

我一直在尝试在ruby-1.9.2中导入CSV文件时遇到令人难以置信的时间。 我试图解析的文件有: 列中的逗号 列内的引号 使用’@’作为:col_sep csv.txt(代表性输入,真实的是101k行): 㔾@㔾@jié@”seal” radical in Chinese characters, (Kangxi radical 26) 我的代码: require ‘csv’ CSV.foreach(“/Users/adam/Desktop/csvtest.txt”, {:col_sep => “@”}) do |row| puts row.to_s end 我想要的输出: [“㔾”, “㔾”, “jié”, “\”seal\” radical in Chinese characters, (Kangxi radical 26)”] 我得到的输出: CSV::MalformedCSVError: Unclosed quoted field on line 1. from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1910:in `block in shift’ from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1825:in `loop’ from […]

如何使用Ruby删除文本文件中间的数据行

我知道如何写入文件,并从文件中读取,但除了将整个文件读入内存,操作它并重写整个文件之外,我不知道如何修改文件。 对于大文件,这不是很有效率。 我真的不知道追加和写的区别。 例如 如果我有一个文件包含: Person1,will,23 Person2,Richard,32 Person3,Mike,44 我怎么能只删除包含Person2的行?

如何解析CSV文件,更新字段,然后保存

我需要读取CSV文件,更新字段,然后保存更改。 除了将更改保存到我正在更新的字段之外,我的一切工作正常: require ‘csv’ @parsed_file = CSV::Reader.parse(File.open(“#{RAILS_ROOT}/doc/some.csv”)) @parsed_file.each_with_index do |row, x| address = row[5] l = Location.address_find(address) if l != nil puts “#{l.name} at #{l.address}” row[14] = l.store_code puts row[14] else puts “No matching address Found!!!” end #What do I do here? Something like this? CSV::Writer.generate(@parsed_file) end 我该怎么办? 如何保存我所做的更改并更新文件?

如何跳过CSV文件的第一行并将第二行作为标题

有没有办法跳过CSV文件的第一行并使第二行充当标题? 我有一个CSV文件,第一行有日期,第二行有标题,所以我需要能够在迭代时跳过第一行。 我尝试使用slice但将CSV转换为数组,我真的想将其读作CSV,以便我可以利用标头。