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



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



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

573   8  

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

вы можете попробовать это:

File.foreach('path_to_file').first

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

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

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

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

%H указывает формату на печать полного хэша фиксации. Есть также модули, которые позволяют вам получить доступ к локальному репозиторию git из приложения Rails более ruby-ish, хотя я никогда их не использовал.

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`)

Comments

    Ничего не найдено.