Практическая информатика

    

Работа с файлами


Ввод данных с клавиатуры в процессе выполнения программы удобен только в случае небольших объемов. В других ситуациях необходимо чтение информации из заранее подготовленного файла.

Для работы с файлом при помощи метода new создается экземпляр класса File. Обязательным аргументом этого метода является строка, содержащая имя файла, например,

f = File.new("myfile.txt")

Другим (необязательным) аргументом является задание режима работы с файлом. По умолчанию этот параметр имеет значение "r", что соответствует режиму "только чтение". Если требуется открыть файл с возможностью записи в него, то следует указать параметр "w", например,

f1 = File.new("newfile.txt", "w")

Метод readlines считывает весь файл, создает массив и размещает каждую прочитанную строку в отдельном элементе массива При дальнейшей обработке полученного массива удобно использовать метод each.

Для вывода строки в выходной поток (в файл или на экран монитора) используется метод write, например,

a = "Hello, world!" f1.write(a)

Задача

Имеется текстовый файл fio.txt, содержащий список фамилий, имен и отчеств учащихся. При этом каждая строка файла содержит данные только об одном человеке, например,

Петров Сергей Васильевич Сидорова Ольга Петровна Иванова Марья Даниловна

Напишите программу, которая читает информацию из файла и

  1. печатает пронумерованный список учеников;
  2. печатает пронумерованный список фамилий и инициалов.

Решение 1

f = File.new("fio.txt") n = 1 student = f.readlines student.each{ |i| print n, ". ", i n += 1 }

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

Для получения инициалов каждую строку полученного массива преобразуем в массив, элементами которого будут фамилия, имя и отчество. Затем фамилию печатаем полностью, а вместо следующих элементов массива - только их первый символ. Для преобразования строки в массив используется ранее рассмотренная функция split. Напомним, что параметром по умолчанию этой функции является пробел.

Решение 2

f = File.new("fio.txt") n = 1 student = f.readlines student.each{ |i| i.chop! fio = i.split print n, ". ", fio[0], " ", fio[0][0].chr, ". ", fio[1][0].chr, ".\n" n += 1 }

Пример 1.14.

(html, txt)



Содержание раздела