Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
# Добавить строку в конец и закрыть файл.logfile.puts "Stardate 47824.1: Our show has been canceled."logfile.close10.1.4. Прямой доступ к файлу
Для чтения из файла в произвольном порядке, а не последовательно, можно воспользоваться методом
seekFileIO# myfile содержит строку: abcdefghifile = File.new("myfile")file.seek(5)str = file.gets # "fghi"Если все строки в файле имеют одинаковую длину, то можно перейти сразу в начало нужной строки:
# Предполагается, что все строки имеют длину 20.# Строка N начинается с байта (N-1)*20file = File.new("fixedlines")file.seek(5*20) # Шестая строка!Для выполнения относительного поиска воспользуйтесь вторым параметром. Константа
IO::SEEK_CURfile = File.new("somefile")file.seek(55) # Позиция 55.file.seek(-22, IO::SEEK_CUR) # Позиция 33.file.seek(47, IO::SEEK_CUR) # Позиция 80.Можно также искать относительно конца файла, в таком случае смещение может быть только отрицательным:
file.seek(-20, IO::SEEK_END) # Двадцать байтов от конца файла.Есть еще и третья константа
IO::SEEK_SETМетод
tellposfile.seek(20)pos1 = file.tell # 20file.seek(50, IO::SEEK_CUR)pos2 = file.pos # 70Метод
rewindДля выполнения прямого доступа файл часто открывается в режиме обновления (для чтения и записи). Этот режим обозначается знаком
+10.1.5. Работа с двоичными файлами
Когда-то давно программисты на языке С включали в строку указания режима символ
"b"Исключение составляет семейство операционных систем Windows, в которых различие все еще имеет место. Основное отличие двоичных файлов от текстовых на этой платформе состоит в том, что в двоичном режиме конец строки не преобразуется в один символ перевода строки, а представляется в виде пары «возврат каретки — перевод строки». Еще одно важное отличие — интерпретация символа control-Z как конца файла в текстовом режиме:
# Создать файл (в двоичном режиме).File.open("myfile","wb") {|f| f.syswrite("12345 326789r") }#Обратите внимание на восьмеричное 032 (^Z).# Читать как двоичный файл.str = nilFile.open("myfile","rb") {|f| str = f.sysread(15) )puts str.size # 11# Читать как текстовый файл.str = nilFile.open("myfile","r") {|f| str = f.sysread(15) }puts str.size # 5В следующем фрагменте показано, что на платформе Windows символ возврата каретки не преобразуется в двоичном режиме:
# Входной файл содержит всего одну строку: Строка 1.file = File.open("data")line = file.readline # "Строка 1.n"puts "#{line.size} символов." # 10 символов,file.closefile = File.open("data","rb")line = file.readline # "Строка 1.rn"puts "#{line.size} символов." # 11 символов.file.closeОтметим, что упомянутый в коде метод
binmodefile = File.open("data")file.binmodeline = file.readline # "Строка 1.rn"puts {line.size} символов." # 11 символов.file.closeПри необходимости выполнить низкоуровневый ввод/вывод можете воспользоваться методами
sysreadsyswritesysreadinput = File.new("infile")output = File.new("outfile")instr = input.sysread(10);bytes = output.syswrite("Это тест.")Отметим, что метод
sysreadEOFErrorSystemCallError
