2011-04-27 45 views
27

我知道我這樣做過,發現一組簡單的代碼,但我不記得或發現它:(。如何逐行讀取ruby中的文本文件(在s3上託管它)?

我有我想導入到我的Rails 3應用程序記錄的文本文件。

每一行代表一個記錄潛在的可能是製表符分隔的屬性,但我很好,只是一個單一的值以及

我如何做到這一點

回答

17

你想IO.foreach:?

IO.foreach('foo.txt') do |line| 
    # process the line of text here 
end 

另外,如果真的是製表符分隔,您可能希望使用CSV庫:

File.open('foo.txt') do |f| 
    CSV.foreach(f, col_sep:"\t") do |csv_row| 
    # All parsed for you 
    end 
end 
+0

是否IO.foreach提供一個迭代器? – 2017-09-16 10:48:02

+1

其實這是在這裏回答:https://stackoverflow.com/a/16732186/3114742 – 2017-09-16 10:49:04

4
IO.foreach("input.txt") do |line| 
    out.puts line 
    # You might be able to use split or something to get attributes 
    atts = line.split 
    end 
40
File.open("my/file/path", "r").each_line do |line| 
    # name: "Angela" job: "Writer" ... 
    data = line.split(/\t/) 
    name, job = data.map{|d| d.split(": ")[1] }.flatten 
end 

相關主題

What are all the common ways to read a file in Ruby?

+3

這並沒有解決文件在s3 – Patm 2013-06-13 20:29:50

+0

@Patm,哦,我看到的問題:)但目前所有三個answerers回答這個話題不是關於S3。它只是'如何逐行讀取紅寶石文本文件' – fl00r 2013-06-14 18:47:28

+0

當文件位於s3中時,是否有辦法這樣做? – Angela 2014-10-04 04:43:15

1

您可以使用OpenURI來讀取遠程或本地文件。

假設模型有一個名爲file附件:

# If object is stored in amazon S3, access it through url 
file_path = record.file.respond_to?(:s3_object) ? record.file.url : record.file.path 
open(file_path) do |file| 
    file.each_line do |line| 
    # In your case, you can split items using tabs 
    line.split("\t").each do |item| 
     # Process item 
    end 
    end 
end