Ответ 1
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
Связанная тема
Я знаю, что сделал это раньше и нашел простой набор кода, но я не могу его запомнить или найти: (.
У меня есть текстовый файл записей, которые я хочу импортировать в мое приложение Rails 3.
Каждая строка представляет собой запись. Потенциально это может быть разграничение табуляции для атрибутов, но отлично с одним значением.
Как это сделать?
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
Связанная тема
Вы хотите 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
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
Пробовали ли вы использовать OpenURI
(http://ruby-doc.org/stdlib-2.1.2/libdoc/open-uri/rdoc/OpenURI.html)? Вам нужно будет сделать ваши файлы доступными из S3.
Или попробуйте использовать камень aws-sdk
(http://aws.amazon.com/sdk-for-ruby).
Вы можете использовать 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