Архив метки: файлы

Главная / файлы
1 Пост

В этом посте мы обсудим:

  • Чтение и запись в файлы
  • Исключения
  • Чтение значений из переменных среды

Чтение из файла

Итак, у вас есть файл с именем test.txt, и вы хотите написать программу на Ruby, которая читает что-то из этого файла.

тестовый файл test.txt

У вас есть класс File, и у вас есть метод foreach, содержащий в качестве параметра файл, который вы хотите использовать. Затем идет блок, в котором представлены действия.


File.foreach ( 'test.txt' ) do |line|
  puts line
  p line
  p line.chomp # отсекает символ новой строки
  p line.split # массив слов строки
end

чтение файла

Чтение неизвестного файла

Что будет, если файл, из которого вы пытаетесь читать, не существует? Предсказуемо, вы получите исключение.


File.foreach( 'do_not_exist.txt' do |line|
  puts line.chomp
end

Руби попытается прочитать файл, он не найдет его, и выдаст, что do_not_exist.txt не существует, и всё.

И это на самом деле несколько неудачный результат работы вашей программы, потому что она прекращает свое выполнение.

Чтобы обойти это, вы можете обработать исключение. В этом случае вы контролируете, что с этим делать.


begin

  File.foreach ( 'do_not_exist.txt' ) do |line|
    puts line.chomp
  end

rescue Exception => e
  puts e.message
  puts "Давайте притворимся, что этого не было"
end

Результат будет таким:
обработка исключений

Альтернатива исключениям

В качестве альтернативы можно проверять, существует ли файл.


if File.exist? 'test.txt'

  File.foreach( 'test.txt' ) do |line|
    puts line.chomp
  end

end

Обычно это является лучшим способом для простых случаев, когда файл может быть не найден.

Запись в файл

Как насчет записи в файл? Для этого Ruby тоже использует структуру блока.


File.open("test1.txt", "w") do |file|
  file.puts "Первая строка"
  file.puts "Вторая строка"
end

Файл будет автоматически закрыт после выполнения блока.

Переменные среды

Переменные среды специфичны для операционной системы, но как только вы установили их, вы можете легко прочесть их.

К примеру, установив у себя переменную BEST_LANG, я могу прочесть ее:


puts ENV["BEST_LANG"] # => Ruby