66

Rubyを使用して、ファイルの最初の行だけを、可能な限り最も速く、最も単純で、最も慣用的な方法で読み取りたいと思います。最善のアプローチは何ですか?

(具体的には、最新のCapistranoでデプロイされたRailsディレクトリのREVISIONファイルからgit commit UUIDを読み取り、それをタグに出力します。これにより、サーバーにデプロイされているバージョンをhttp-glanceで確認できます。 。これを行うためのまったく異なる、より良い方法がある場合は、私に知らせてください。)

4

8 に答える 8

119

これにより、正確に 1 行が読み取られ、直後にファイルが適切に閉じられます。

strVar = File.open('somefile.txt') {|f| f.readline}
# or, in Ruby 1.8.7 and above: #
strVar = File.open('somefile.txt', &:readline)
puts strVar
于 2009-09-29T01:39:05.280 に答える
25

これは、読み取り用にファイルを適切に開き、後で閉じるという簡潔な慣用的な方法です。

File.open('path.txt', &:gets)

空のファイルで例外を発生させたい場合は、代わりにこれを使用してください。

File.open('path.txt', &:readline)

また、あなたの目的や、さらに数行を読みたい他の多くのインスタンスで機能する head のクイック&ダーティな実装を次に示します。

# 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
于 2011-01-18T17:16:09.687 に答える
7

あなたはこれを試すことができます:

File.foreach('path_to_file').first
于 2009-09-29T01:36:32.667 に答える
6

ruby ファイルの最初の行を読む方法:

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

または、アプリケーション内から git-log を実行することもできます:

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

%H は、完全なコミット ハッシュを出力する形式を示します。私は使ったことはありませんが、Rails アプリ内からより Ruby っぽい方法でローカルの git リポジトリにアクセスできるようにするモジュールもあります。

于 2009-09-29T01:39:26.527 に答える
4
first_line = open("filename").gets
于 2009-09-29T01:36:31.443 に答える