Чтение первой строки файла в Ruby
Я хочу прочитать только первая строка файла, использующего Ruby самым быстрым, простым, наиболее идиоматичным способом. Каков наилучший подход?
(в частности: я хочу прочитать git commit UUID из файла ревизии в моем последнем каталоге Rails, развернутом в Capistrano, а затем вывести его в мой тег. Это позволит мне увидеть на http-взгляд, какая версия развернута на моем сервере. Если есть совершенно другой и лучший способ сделать это, пожалуйста, позвольте мне знать.)
8 ответов:
это будет читать ровно одну строку и убедитесь, что файл правильно закрыт сразу после этого.
strVar = File.open('somefile.txt') {|f| f.readline} # or, in Ruby 1.8.7 and above: # strVar = File.open('somefile.txt', &:readline) puts strVar
вот краткий идиоматический способ сделать это, что правильно открывает файл для чтения и закрывает его впоследствии.
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
Как прочитать первую строку в файле ruby:
commit_hash = File.open("filename.txt").firstв качестве альтернативы вы можете просто сделать git-log изнутри вашего приложения:
commit_hash = `git log -1 --pretty=format:"%H"`%H указывает формату на печать полного хэша фиксации. Есть также модули, которые позволяют вам получить доступ к локальному репозиторию git из приложения Rails более ruby-ish, хотя я никогда их не использовал.
улучшая ответ, опубликованный @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`)
Comments