Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Дополнительную информацию о классе
Pathname10.1.19. Манипулирование файлами на уровне команд
Часто приходится манипулировать файлами так, как это делается с помощью командной строки: копировать, удалять, переименовывать и т.д.
Многие из этих операций реализованы встроенными методами, некоторые находятся в модуле
FileUtilsfileutilsFileUtilsFileДля удаления файла служит метод
File.deleteFile.unlinkFile.delete("history")File.unlink("toast")Переименовать файл позволяет метод
File.renameFile.rename("Ceylon","SriLanka")Создать ссылку на файл (физическую или символическую) позволяют методы
File.linkFile.symlinkFile.link("/etc/hosts","/etc/hostfile") # Физическая ссылка.File.symlink("/etc/hosts","/tmp/hosts") # Символическая ссылка.Файл можно усечь до нулевой длины (или до любой другой), воспользовавшись методом экземпляра
truncateFile.truncate("myfile",1000) # Теперь не более 1000 байтов.Два файла можно сравнить с помощью метода
compare_filecmpcompare_streamrequire "fileutils"same = FileUtils.compare_file("alpha","beta") # trueМетод
copycprequire "fileutils"# Скопировать файл epsilon в theta с протоколированием ошибок.FileUtils.сору("epsilon","theta", true)Файл можно перемещать методом
movemvсоруrequire "fileutils"FileUtils.move( "/trap/names", "/etc") # Переместить в другой каталог.FileUtils.move("colours","colors") # Просто переименовать.Метод
safe_unlinktruefalserequire "fileutils"FileUtils.safe_unlink("alpha","beta","gamma")# Протоколировать ошибки при удалении следующих двух файлов:FileUtils.safe_unlink("delta","epsilon",true)Наконец, метод
installsyscopyrequire "fileutils"FileUtils.install("foo.so","/usr/lib")# Существующий файл foo.so не будет переписан,# если он не отличается от нового.Дополнительную информацию о модуле
FileUtils10.1.20. Ввод символов с клавиатуры
В данном случае мы имеем в виду небуферизованный ввод, когда символ обрабатывается сразу после нажатия клавиши, не дожидаясь, пока будет введена вся строка.
Это можно сделать и в UNIX, и в Windows, но, к сожалению, совершенно по-разному.
Версия для UNIX прямолинейна. Мы переводим терминал в режим прямого ввода (raw mode) и обычно одновременно отключаем эхо-контроль.
def getchar system("stty raw -echo") # Прямой ввод без эхо-контроля. char = STDIN.getc system("stty -raw echo") # Восстановить режим терминала. charendНа платформе Windows придется написать расширение на С. Пока что альтернативой является использование одной из функций в библиотеке
Win32APIrequire 'Win32API'def getchar char = Win32API.new("crtdll", "_getch", [], 'L').CallendПоведение в обоих случаях идентично.
10.1.21. Чтение всего файла в память
Чтобы прочитать весь файл в массив, не нужно даже его предварительно открывать. Все сделает метод
IO.readlinesarr = IO.readlines("myfile")lines = arr.sizeputs "myfile содержит #{lines} строк."longest = arr.collect {|x| x.length}.maxputs "Самая длинная строка содержит #{longest} символов."Можно также воспользоваться методом
IO.read
