Je veux lire niquement la première ligne d'un fichier en utilisant Ruby de la manière la plus rapide, la plus simple et la plus idiomatique possible. Quelle est la meilleure approche?
(Plus précisément: je veux lire l'UUID git commit du fichier REVISION dans mon dernier répertoire Capistrano-deploy Rails, puis le publier sur ma balise. Cela me permettra de voir sur http -voir quelle version est déployée sur mon serveur. S'il y a une manière entièrement différente et meilleure de le faire, veuillez me le faire savoir.)
Cela lira exactement une ligne et garantira que le fichier est correctement fermé immédiatement après.
strVar = File.open('somefile.txt') {|f| f.readline}
# or, in Ruby 1.8.7 and above: #
strVar = File.open('somefile.txt', &:readline)
puts strVar
Voici une manière idiomatique concise de le faire qui ouvre correctement le fichier pour la lecture et le ferme ensuite.
File.open('path.txt', &:gets)
Si vous souhaitez qu'un fichier vide provoque une exception, utilisez-le à la place.
File.open('path.txt', &:readline)
En outre, voici une implémentation rapide et sale de head qui fonctionnerait pour vos besoins et dans de nombreux autres cas où vous souhaitez lire quelques lignes supplémentaires.
# 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
Vous pouvez essayer ceci:
File.foreach('path_to_file').first
Comment lire la première ligne d'un fichier Ruby:
commit_hash = File.open("filename.txt").first
Alternativement, vous pouvez simplement faire un git-log depuis l'intérieur de votre application:
commit_hash = `git log -1 --pretty=format:"%H"`
Le% H indique au format d'imprimer le hachage de validation complet. Il existe également des modules qui vous permettent d'accéder à votre référentiel git local à partir d'une application Rails d'une manière plus Ruby-ish bien que je ne les ai jamais utilisés.
first_line = open("filename").gets
first_line = File.readlines('file_path').first.chomp
En améliorant la réponse publiée par @Chuck, je pense qu'il pourrait être utile de souligner que si le fichier que vous lisez est vide, une exception EOFError sera levée. Attrapez et ignorez l'exception:
def readit(filename)
text = ""
begin
text = File.open(filename, &:readline)
rescue EOFError
end
text
end
Je pense que la suggestion de jkupferman d'enquêter sur le git --pretty
les options sont les plus sensées, cependant une autre approche serait la commande head
par exemple.
Ruby -e 'puts `head -n 1 filename`' #(backtick before `head` and after `filename`)