Ruby I/O faylida EOFError nima?

rasmiy hujjatlarda aniq belgilanmagan. Men EOFError "Faylning oxiri xatosi" degan ma'noni tushunaman, lekin bu nimani anglatadi? Agar faylni o'quvchi faylning oxiriga yetib qolsa, bu menga xatolik kabi ko'rinmaydi.


person Tony    schedule 13.08.2009    source manba


Javoblar (2)


EOFError barcha IO-larda qulay, ya'ni ruby-dagi barcha kirish/chiqishning asosi bo'lgan sinf. Endi asosiy Unix tushunchalarini ham eslang: hamma narsa fayl. Bunga rozetkalar kiradi. Shunday qilib, agar sizda rozetka ochiq bo'lsa va undan o'qiyotgan bo'lsangiz, faylning oxiriga duch kelish istisno shart bo'lishi mumkin.

U yerdagi barcha misollar EOFError ning ahamiyatsiz ishlatilishini (ba'zi matnli fayllarni o'qishda) ko'rsatadi, bu haqiqatan ham foydali emas. Biroq, net/http yoki rozetkalardan ko'p foydalanadigan boshqa sinflar orqali qazishni boshlang va siz ushbu istisno ishlatilayotganini ko'rasiz.

Ushbu misolni net/ftp dan qo'shish uchun tahrirlangan

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
person Community    schedule 13.08.2009
comment
Rahmat Swanand. Men misol kodini find... find dan sevimli foydalanganim uchun qarzdorman. find /usr/lib/ruby/1.8/net/ -name *.rb -exec grep EOFError /dev/null '{}' \; - person ; 13.08.2009

EOFError (Fayl oxiri xatosi), fayl oxiriga havola qilingan fayl ob'ektida operatsiyani bajarishga urinayotganda paydo bo'ladi. Ushbu misolda biz chiziq mavjud bo'lmaganda readline ga harakat qilyapmiz.

Masalan:

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

Xuddi shu narsaga EOFErrorsiz erishish mumkin:

File.open(filename).each do |line|
    sline = FasterCSV.parse_line(line)
    # Do stuff with sline        
end
person Swanand    schedule 13.08.2009
comment
javob uchun rahmat. Men tushunaman EOFError fayl oxiri xatosi degani. lekin bu aniq nimani anglatadi? Agar o'quvchi faylning oxiriga yetib borsa, bu menga xatodek tuyulmaydi. - person Tony; 13.08.2009
comment
Kechirasiz, men qanchalik ahmoqlik deb hisoblamayman. Men javobni yangiladim, lekin menimcha, u hali ham savolingizga javob bermasligi mumkin. - person Swanand; 13.08.2009
comment
agar bu ikkita faylni qayta ishlash uchun deyarli teng bo'lsa, biroz yordam beradi. rahmat - person Tony; 13.08.2009