Ответ 1
Это будет читать ровно одну строку и гарантировать, что файл будет правильно закрыт сразу после.
File.open('somefile.txt') {|f| f.readline}
# or, in Ruby 1.8.7 and above: #
File.open('somefile.txt', &:readline)
Я хочу читать только первую строку файла, используя Ruby в самом быстром, простейшем, наиболее идиоматическом способе. Какой лучший подход?
(В частности: я хочу прочитать UUID с кодом git из файла REVISION в моем последнем каталоге Rails с расширением Capistrano, а затем вывести его в мой тег. Это позволит мне взглянуть на http-glance, какую версию развертывается на моем сервере. Если у вас есть совершенно другой и лучший способ сделать это, пожалуйста, дайте мне знать.)
Это будет читать ровно одну строку и гарантировать, что файл будет правильно закрыт сразу после.
File.open('somefile.txt') {|f| f.readline}
# or, in Ruby 1.8.7 and above: #
File.open('somefile.txt', &:readline)
Здесь кратко идиоматический способ сделать это, который правильно открывает файл для чтения и закрывает его впоследствии.
File.open('path.txt', &:gets)
Если вы хотите, чтобы пустой файл вызывал исключение, используйте это вместо.
File.open('path.txt', &:readline)
Кроме того, здесь быстрая и грязная реализация головы, которая будет работать для ваших целей и во многих других случаях, когда вы хотите прочитать еще несколько строк.
# Reads a set number of lines from the top.
# Usage: File.head('path.txt')
class File
def self.head(path, n = 1)
open(path) do |f|
lines = []
n.times do
line = f.gets || break
lines << line
end
lines
end
end
end
Вы можете попробовать следующее:
File.foreach('path_to_file').first
Как прочитать первую строку в рубиновом файле:
commit_hash = File.open("filename.txt").first
В качестве альтернативы вы можете просто сделать git -log из своего приложения:
commit_hash = `git log -1 --pretty=format:"%H"`
В% H указывается формат для печати полного хэша commit. Существуют также модули, которые позволяют вам получить доступ к локальному репозиторию git изнутри приложения Rails в более рубиновом режиме, хотя я никогда не использовал их.
first_line = open("filename").gets
first_line = File.readlines('file_path').first.chomp
Улучшая ответ, отправленный @Chuck, я думаю, было бы целесообразно указать, что если файл, который вы читаете, пуст, будет выбрано исключение EOFError. Поймать и игнорировать исключение:
def readit(filename)
text = ""
begin
text = File.open(filename, &:readline)
rescue EOFError
end
text
end
Я думаю, что предложение jkupferman по исследованию опций git --pretty
имеет наибольший смысл, однако еще одним подходом будет команда head
, например.
ruby -e 'puts `head -n 1 filename`' #(backtick before `head` and after `filename`)