2009-08-13 10 views
9

official documentation निर्दिष्ट नहीं है। मैं समझता हूं कि EOFError का अर्थ है "फ़ाइल त्रुटि का अंत", लेकिन इसका क्या अर्थ है? यदि कोई फ़ाइल रीडर फ़ाइल के अंत तक पहुंच जाता है, तो यह मेरे लिए त्रुटि की तरह नहीं लगता है।रुबी फ़ाइल I/O में EOFError क्या है?

उत्तर

13

EOFError आईओ, वर्ग जो सभी इनपुट/आउटपुट का आधार है के सभी में उपयोगी है:

import_file = File.open(filename) 
begin 
    while (line = import_file.readline) 
    sline = FasterCSV.parse_line(line) 
    # Do stuff with sline 
    end 
rescue EOFError 
    # Finished processing the file 
end 

एक ही बात EOFError बिना प्राप्त किया जा सकता रूबी में अब कोर यूनिक्स अवधारणाओं को भी याद रखें: सबकुछ एक फाइल है। इसमें सॉकेट शामिल हैं। इसलिए, यदि आपके पास कुछ सॉकेट खुला है और इससे पढ़ रहे हैं, तो फाइल के अंत का सामना करना पड़ सकता है।

वहां के सभी उदाहरण EOFError (कुछ पाठ फ़ाइल पढ़ने के दौरान) के छोटे उपयोग दिखाते हैं, जो वास्तव में उपयोगी नहीं हैं। हालांकि, नेट/http या अन्य कक्षाओं के माध्यम से खोदना शुरू करें जो सॉकेट का भारी उपयोग करते हैं, और आप इस अपवाद का उपयोग कर देखेंगे।

संपादित प्रतिक्रिया के लिए/एफ़टीपी

def getline 
    line = @sock.readline # if get EOF, raise EOFError 
    line.sub!(/(\r\n|\n|\r)\z/n, "") 
    if @debug_mode 
    print "get: ", sanitize(line), "\n" 
    end 
    return line 
end 
+1

+1। – Swanand

+1

धन्यवाद स्वानंद। मुझे उदाहरण के कोड को मेरे पसंदीदा उपयोग के लिए देना है ... "ढूंढें /usr/lib/ruby/1.8/net/ -name * .rb -exec grep EOFError/dev/null '{}' \;" –

9

EOFError (फ़ाइल त्रुटि का अंत), जब आप किसी फ़ाइल ऑब्जेक्ट पर एक ऑपरेशन करने का प्रयास कर रहे हैं तो उसे फेंक दिया गया है जो पहले से ही फ़ाइल के अंत में संदर्भित कर रहा है। इस उदाहरण में, जब लाइन मौजूद नहीं है, तो हम readline पर प्रयास कर रहे हैं।

उदाहरण के लिए:

File.open(filename).each do |line| 
    sline = FasterCSV.parse_line(line) 
    # Do stuff with sline   
end 
+1

धन्यवाद नेट से इस उदाहरण जोड़ने के लिए। मैं समझता हूं कि EOFError का अर्थ है "फ़ाइल त्रुटि का अंत"। लेकिन उसका अक्षरशः अर्थ क्या है? अगर पाठक फ़ाइल के अंत तक पहुंचता है, तो यह मेरे लिए एक त्रुटि की तरह नहीं लगता है। – Tony

+0

क्षमा करें, मेरे बारे में विचार करने के लिए कितना बेवकूफ नहीं है। मैंने जवाब अपडेट किया, लेकिन मुझे लगता है कि यह अभी भी आपके प्रश्न का उत्तर नहीं दे सकता है। – Swanand

+0

यदि वे दो फ़ाइल हैंडलिंग के लिए काफी समकक्ष हैं, तो थोड़ा सा मदद करता है। एक बेहतर उत्तर के लिए धन्यवाद – Tony

संबंधित मुद्दे