2009-09-29 19 views
50

में फ़ाइल की पहली पंक्ति पढ़ना मैं केवल को रूबी का उपयोग करके फ़ाइल की पहली पंक्ति को सबसे तेज़, सरल, सबसे बेवकूफ तरीके से संभवतः पढ़ना चाहता हूं। सबसे अच्छा तरीका क्या है?रुबी

(विशेष रूप से:। मैं पढ़ने के लिए Git मेरा नवीनतम Capistrano-तैनात रेल निर्देशिका में संशोधन फ़ाइल से बाहर UUID प्रतिबद्ध है, और फिर उत्पादन मेरी टैग करने के लिए यह मैं एक http नज़र क्या संस्करण है पर देखते हैं जाएगा कि चाहते हैं अपने सर्वर के लिए तैनात होती है, तो एक बिल्कुल अलग & बेहतर तरीका यह है, तो कृपया मुझे बताएं)

उत्तर

93

यह ठीक एक पंक्ति पढ़ सकते हैं और यह सुनिश्चित करेंगे कि फाइल तुरंत ठीक से बंद है।

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

आप इस कोशिश कर सकते हैं:।।

File.foreach('path_to_file').first 
+0

LocalJumpError: कोई ब्लॉक दिए गए – klochner

+3

@klochner: अपने रूबी पुराना है। यह 1.8.7 और उससे ऊपर में ठीक काम करता है। – Chuck

+0

क्षमा करें विन्सेंट, जब तक आप कुछ मामूली संपादन नहीं करते हैं, तब तक मैं डाउनवोट को हटा नहीं सकता। – klochner

5

कैसे एक गहरे लाल रंग का फ़ाइल में पहली पंक्ति को पढ़ने के लिए:

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

वैकल्पिक रूप से आप सिर्फ कर सकता है एक अपने आवेदन के भीतर से Git-लॉग इन करें:

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

% एच बताता है पूर्ण प्रतिबद्ध हैश मुद्रित करने के लिए प्रारूप। ऐसे मॉड्यूल भी हैं जो आपको एक रेल ऐप के अंदर से अपने स्थानीय गिट रेपो को अधिक रूबी-आइश तरीके से एक्सेस करने की अनुमति देते हैं, हालांकि मैंने कभी उनका उपयोग नहीं किया है।

+0

.last काम नहीं कर रहा है क्योंकि मैंने यहां योजना बनाई है। मैं आखिरी पंक्ति के लिए यह कैसे करूँ? –

1

मुझे लगता है कि git --pretty विकल्पों की जांच करने के jkupferman सुझाव सबसे अधिक समझ में आता है, हालांकि अभी तक एक और दृष्टिकोण head कमांड उदा।

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

https://gist.github.com/784711 – maletor

15

यहां ऐसा करने के लिए एक संक्षिप्त बेवकूफ तरीका है जो इसे पढ़ने और बंद करने के लिए फ़ाइल को ठीक से खोलता है।

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 
+1

सरल कार्यान्वयन: 'कक्षा फ़ाइल; def self.head (पथ, एन = 1); foreach (पथ) प्रथम (एन); समाप्त; अंत ' –

+1

(6 साल बाद ....) उन पहले 2 उदाहरणों में क्या हो रहा है, प्रतीक के साथ दूसरे तर्क के रूप में प्रतीक के साथ क्या हो रहा है? मुझे कोई दस्तावेज़ नहीं मिल रहा है जो बताता है कि यह क्या कर रहा है। किसी भी जानकारी के लिए Thx ... – skydvr

2

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

+1

हालांकि यह काम करता है, लेकिन क्या यह पूरी फ़ाइल को स्मृति में लोड नहीं करेगा? – Saim

2

जवाब @Chuck द्वारा पोस्ट की गई पर सुधार करना, मैं इसे करते रहे कि अगर फाइल आप पढ़ रहे हैं खाली है, एक EOFError अपवाद फेंक दिया जाएगा सार्थक हो सकता है लगता है। पकड़ो और अपवाद की अनदेखी:

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