Подтвердить что ты не робот

Чтение первой строки файла в Ruby

Я хочу читать только первую строку файла, используя Ruby в самом быстром, простейшем, наиболее идиоматическом способе. Какой лучший подход?

(В частности: я хочу прочитать UUID с кодом git из файла REVISION в моем последнем каталоге Rails с расширением Capistrano, а затем вывести его в мой тег. Это позволит мне взглянуть на http-glance, какую версию развертывается на моем сервере. Если у вас есть совершенно другой и лучший способ сделать это, пожалуйста, дайте мне знать.)

4b9b3361

Ответ 1

Это будет читать ровно одну строку и гарантировать, что файл будет правильно закрыт сразу после.

File.open('somefile.txt') {|f| f.readline}
# or, in Ruby 1.8.7 and above: #
File.open('somefile.txt', &:readline)

Ответ 2

Здесь кратко идиоматический способ сделать это, который правильно открывает файл для чтения и закрывает его впоследствии.

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

Ответ 3

Вы можете попробовать следующее:

File.foreach('path_to_file').first

Ответ 4

Как прочитать первую строку в рубиновом файле:

commit_hash = File.open("filename.txt").first

В качестве альтернативы вы можете просто сделать git -log из своего приложения:

commit_hash = `git log -1 --pretty=format:"%H"`

В% H указывается формат для печати полного хэша commit. Существуют также модули, которые позволяют вам получить доступ к локальному репозиторию git изнутри приложения Rails в более рубиновом режиме, хотя я никогда не использовал их.

Ответ 5

first_line = open("filename").gets

Ответ 6

first_line = File.readlines('file_path').first.chomp

Ответ 7

Улучшая ответ, отправленный @Chuck, я думаю, было бы целесообразно указать, что если файл, который вы читаете, пуст, будет выбрано исключение EOFError. Поймать и игнорировать исключение:

def readit(filename)
 text = ""
 begin
   text = File.open(filename, &:readline)
 rescue EOFError
 end
 text
end

Ответ 8

Я думаю, что предложение jkupferman по исследованию опций git --pretty имеет наибольший смысл, однако еще одним подходом будет команда head, например.

ruby -e 'puts `head -n 1 filename`'  #(backtick before `head` and after `filename`)