Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
str = IO.read("myfile")bytes = arr.sizeputs "myfile содержит #{bytes} байтов."longest=str.collect {|x| x.length}.max # строки - перечисляемые объекты!puts "Самая длинная строка содержит #{longest} символов."Поскольку класс
IOFileFile.deadlinesFile.read10.1.22. Построчное чтение из файла
Чтобы читать по одной строке из файла, можно обратиться к методу класса
IO.foreacheach# Напечатать все строки, содержащие слово "target".IO.foreach("somefile") do |line| puts line if line =~ /target/end# Другой способ...file = File.new("somefile")file.each do |line| puts line if line =~ /target/endОтметим, что
each_lineeach10.1.23. Побайтное чтение из файла
Для чтения из файла по одному байту служит метод экземпляра
each_bytechrfile = File.new("myfile")e_count = 0file.each_byte do |byte| e_count += 1 if byte == ?eend10.1.24. Работа со строкой как с файлом
Иногда возникает необходимость рассматривать строку как файл. Что под этим понимается, зависит от конкретной задачи.
Объект определяется прежде всего своими методами. В следующем фрагменте показано, как к объекту
sourcesourcesource.each do |line| puts lineendЭто могли бы быть как файл, так и строка, содержащая внутри символы новой строки. В таких случаях строку можно трактовать как файл без всякого труда.
В последних версиях Ruby имеется также библиотека
stringioИнтерфейс класса
StringIOstringrequire 'stringio'ios = StringIO.new("abcdefghijklnABCn123")ios.seek(5)ios.puts("xyz")puts ios.tell # 8puts ios.string.dump # "abcdexyzijklnABCn123"с = ios.getcputs "с = #{c}" # с = 105ios.ungetc(?w)puts ios.string.dump # "abcdexyzwjklnABCn123"puts "Ptr = #{ios.tell}"s1 = ios.gets # "wjkl"s2 = ios.gets # "ABC"10.1.25. Чтение данных, встроенных в текст программы
Когда подростком вы учили язык BASIC, копируя программы из журналов, то, наверное, для удобства часто пользовались предложением
DATAПри желании то же самое можно сделать и в Ruby. Директива
__END__DATAIO__END__# Распечатать все строки "задом наперед"...DATA.each_line do |line| puts line.reverseend__END__A man, a plan, a canal... Panama!Madam, I'm Adam.,siht daer nac uoy fI.drah oot gnikrow neeb ev'uoy10.1.26. Чтение исходного текста программы
Если вы хотите получить доступ к исходному тексту собственной программы, то можете воспользоваться уже описанным выше трюком (см. раздел 10.1.25).
Глобальная константа
DATAIO__END__rewindСледующая программа выводит собственный текст, снабжая его номерами строк. Это не очень полезно, но, быть может, вы найдете и другие применения такой техники.
DATA.rewindnum = 1DATA.each_line do |line| puts "#{'%03d' % num} #{line}" num += 1end
