从CSV数据创建ruby文件?

时间:2013-12-11 15:45:03

标签: ruby-on-rails ruby

我正在尝试获取CSV文件的内容,然后使用这些内容生成另一个文件。

我采取的方法是将数据导入模型(http://railscasts.com/episodes/396-importing-csv-and-excel)。

现在我想从数据库中获取数据并创建一个文本文件。

我使用:

创建了一个Ruby文件
target  = "target.rb"
content = "test"
File.open(target, "w+") do |f|
  f.write(content)
end

我无法弄清楚如何填写内容'使用我的数据模型中的数据。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

首先,让我们看一下您编写的代码。它可以全部缩减为:

content = "test"
File.write("target.rb", content)

将它扩展一点并使其更具惯用性:

content = "test"
File.open("target.rb", "w") do |f|
  f.write(content)
end
  • 不要将'w+'用于file mode,除非您理解为什么需要它。而是使用w,这是“只写”并且足以进行正常的文件写入/创建。
  • 无需将文件名称分配给变量,然后将该变量用于File.open的参数。只需在那里使用文字名称;避免不必要的变量赋值,除非您需要多次使用它。 (如果您不止一次使用文字作业,请考虑使用常量。)

您的问题中没有样本输入或所需输出的示例,因此很难解决问题的CSV方面;因此,与CSV有关的问题没有任何问题。 Ruby的CSV类很好地记录了,并且有一些例子涵盖了正常的日常工作。

答案 1 :(得分:0)

我的声誉不足以通过评论向您询问有关您的要求的更多问题,但这里有一些可能有用的事实。

我假设您已经使用所需信息填充了Rails模型。我没有您的示例代码,因此我将提供一个“预订”示例。模型。 Book模型有一个标题和一个作者,都是String类型。

target = "file.txt"
contents = ""

# Get all books as an array. Arrays have iterators so we can use 'each'
Book.all.each do |book|
  # get the book title, append it to the string. Add a newline
  contents.concat(book.title).concat($/)

  # get the book author
  contents.concat(book.author).concat($/)

  # Just a line separator 
  contents.concat("-----").concat($/)
end
File.open(target, "w").write(contents)

上面会在文本文件中产生类似的内容:

Book 1
Author 1
-----
Book 2
Author 1
-----
...

阅读有关Rails活动记录的更多信息也可能对您有所帮助:ActiveRecord