Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Возможно, все это показалось вам хаотичным нагромождением разнородных фактов; если так, вы абсолютно правы!.. Отчасти сложность проистекает из самой природы ввода/вывода, отчасти это результат компромиссов, принятых при проектировании, а отчасти следствие наследия прошлых лет, устоявшихся традиций и особенностей различных языков и операционных систем.
Ввод/вывод в Ruby сложен, потому что он сложен в принципе. Но мы старались описать его как можно понятнее и показать, где и когда стоит применять различные приемы.
В основе системы ввода/вывода в Ruby лежит класс
IOFileFileStatstatlstatFile::StatВ модуле
FileTestFileНаконец, методы ввода/вывода есть и в модуле
KernelObjectПоначалу может показаться, что это хаотическое хитросплетение перекрывающейся функциональности. Но в каждый момент времени вам необходима лишь небольшая часть всего каркаса.
На более высоком уровне Ruby предлагает механизмы, позволяющие сделать объекты устойчивыми. Метод
MarshalPStoreНа самом высоком уровне возможен интерфейс с системами управления базами данных, например MySQL или Oracle. Эта тема настолько сложна, что ей можно было бы посвятить одну или даже несколько книг. Мы ограничимся лишь кратким введением. В некоторых случаях будут даны ссылки на архивы в сети.
10.1. Файлы и каталоги
Под файлом мы обычно, хотя и не всегда, понимаем файл на диске. Концепция файла в Ruby, как и в других языках, — это полезная абстракция. Говоря «каталог», мы подразумеваем каталог или папку в смысле, принятом в UNIX и Windows.
Класс
FileIODir10.1.1. Открытие и закрытие файлов
Метод класса
File.newFileНеобязательный второй параметр называется строкой указания режимам он говорит, как нужно открывать файл — для чтения, для записи и т.д. (Строка указания режима не имеет ничего общего с разрешениями.) По умолчанию предполагается режим
"r"file1 = File.new("one") # Открыть для чтения.file2 = File.new("two", "w") # Открыть для записи.Есть также разновидность метода new, принимающая три параметра. В этом случае второй параметр задает начальные разрешения для файла (обычно записывается в виде восьмеричной константы), а третий представляет собой набор флагов, объединенных союзом ИЛИ. Флаги обозначаются константами, например:
File::CREATFile::RDONLYfile = File.new("three", 0755, File::CREAT|File::WRONLY)В виде любезности по отношению к операционной системе и среде исполнения всегда закрывайте открытые вами файлы. Если файл был открыт для записи, то это не просто вежливость, а способ предотвратить потерю данных. Для закрытия файла предназначен метод
closeout = File.new("captains.log", "w")# Обработка файла...out.closeИмеется также метод
opennewtrans = File.open("transactions","w")Но методу
openFile.open("somefile","w") do |file| file.puts "Строка 1" file.puts "Строка 2" file.puts "Третья и последняя строка"end# Теперь файл закрыт.Это изящный способ обеспечить закрытие файла по завершении работы с ним. К тому же при такой записи весь код обработки файла сосредоточен в одном месте.
10.1.2. Обновление файла
Чтобы открыть файл для чтения и записи, достаточно добавить знак плюс (
+f1 = File.new("file1", "r+")# Чтение/запись, от начала файла.f2 = File.new("file2", "w+")# Чтение/запись; усечь существующий файл или создать новый.f3 = File.new("file3", "а+")# Чтение/запись; перейти в конец существующего файла или создать новый.10.1.3. Дописывание в конец файла
Чтобы дописать данные в конец существующего файла, нужно задать строку указания режима
"а"logfile = File.open("captains_log", "a")
