2013-12-11 22 views
0

我正在尝试获取CSV文件的内容,然后使用这些内容生成另一个文件。从CSV数据创建一个ruby文件?

我采取的方法是将我的数据导入模型(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 

我不知道如何填写“内容”从我的数据模型中的数据。

有什么建议吗?

+0

如何将生成的文件看喜欢? – Stefan

+0

如果:(列1的行1值)然后做x如果:(列2的行2)然后做z – JRTurner1234

+0

请更具体地说,这不是有效的Ruby代码。 – Stefan

回答

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

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类虽然记录得很好,并且有例子涵盖了正常的日常工作。