Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
str = IO.read("myfile")
bytes = arr.size
puts "myfile содержит #{bytes} байтов."
longest=str.collect {|x| x.length}.max # строки - перечисляемые объекты!
puts "Самая длинная строка содержит #{longest} символов."
Поскольку класс
IO
File
File.deadlines
File.read
10.1.22. Построчное чтение из файла
Чтобы читать по одной строке из файла, можно обратиться к методу класса
IO.foreach
each
# Напечатать все строки, содержащие слово "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_line
each
10.1.23. Побайтное чтение из файла
Для чтения из файла по одному байту служит метод экземпляра
each_byte
chr
file = File.new("myfile")
e_count = 0
file.each_byte do |byte|
e_count += 1 if byte == ?e
end
10.1.24. Работа со строкой как с файлом
Иногда возникает необходимость рассматривать строку как файл. Что под этим понимается, зависит от конкретной задачи.
Объект определяется прежде всего своими методами. В следующем фрагменте показано, как к объекту
source
source
source.each do |line|
puts line
end
Это могли бы быть как файл, так и строка, содержащая внутри символы новой строки. В таких случаях строку можно трактовать как файл без всякого труда.
В последних версиях Ruby имеется также библиотека
stringio
Интерфейс класса
StringIO
string
require 'stringio'
ios = StringIO.new("abcdefghijklnABCn123")
ios.seek(5)
ios.puts("xyz")
puts ios.tell # 8
puts ios.string.dump # "abcdexyzijklnABCn123"
с = ios.getc
puts "с = #{c}" # с = 105
ios.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__
DATA
IO
__END__
# Распечатать все строки "задом наперед"...
DATA.each_line do |line|
puts line.reverse
end
__END__
A man, a plan, a canal... Panama!
Madam, I'm Adam.
,siht daer nac uoy fI
.drah oot gnikrow neeb ev'uoy
10.1.26. Чтение исходного текста программы
Если вы хотите получить доступ к исходному тексту собственной программы, то можете воспользоваться уже описанным выше трюком (см. раздел 10.1.25).
Глобальная константа
DATA
IO
__END__
rewind
Следующая программа выводит собственный текст, снабжая его номерами строк. Это не очень полезно, но, быть может, вы найдете и другие применения такой техники.
DATA.rewind
num = 1
DATA.each_line do |line|
puts "#{'%03d' % num} #{line}"
num += 1
end