§ 25. Организация ввода и вывода данных с использованием файлов
До сих пор мы программировали ввод исходных данных с клавиатуры и вывод на экран монитора. Как было сказано в § 17, вводом/выводом называется обмен данными между оперативной памятью и любыми внешними устройствами, в том числе устройствами внешней памяти: магнитными и оптическими дисками, флеш-накопителями.
Информация на внешних носителях хранится в файлах. По форме хранения данных файлы бывают типизированными, не-типизированными и текстовыми. В типизированных и нетипизированных файлах данные различных типов хранятся в том же формате, что и в оперативной памяти. Следовательно, при чтении и записи в такие файлы данные копируются, не изменяя объема и формы своего представления. В текстовых файлах данные хранятся в символьном формате. Поэтому при вводе (чтении) чисел из текстового файла происходит преобразование их представления из символьной формы в форму их внутреннего представления (с фиксированной или плавающей запятой). А при выводе (записи) чисел в текстовый файл они преобразуются из внутренней формы в символьную.
Далее мы будем использовать только текстовые файлы.
Текстовые файлы
Текстовый файл — наиболее часто употребляемая разновидность файлов. Устройства ввода с клавиатуры и вывода на экран работают только с текстовыми файлами. Файлы, содержащие тексты программ на Паскале и других языках программирования, являются текстовыми. Различная документация, информация, передаваемая по каналам электронной связи, — всё это текстовые файлы.
Содержимое текстового файла представляет собой символьную последовательность, разделенную на строки. Каждая строка заканчивается специальным признаком EOLN (end of line — конец строки). Весь файл заканчивается признаком EOF (end of file — конец файла). Схематически это выглядит так:
Здесь Si обозначает i-й символ в строке. Каждый символ представлен во внутреннем коде (ASCII) и занимает 1 байт. Признак EOLN состоит из двух однобайтовых управляющих кодов: CR (код ASCII — 13) — возврат к началу строки и LF (код ASCII — 10) — перевод строки. При выводе содержимого текстового файла на экран или на печать признак EOLN обеспечивает визуальное разделение строк: переход к продолжению вывода с новой строки.
Текстовый файл можно создать или преобразовать с помощью текстового редактора. Его можно просмотреть на экране монитора или распечатать на принтере.
Ввод из текстового файла
Исходные данные могут быть заранее подготовлены в файле с помощью текстового редактора и сохранены на диске под определенным именем. Ввод исходных данных из файла производится автоматически, и при этом не происходит задержки выполнения программы, как при клавиатурном вводе.
Для организации ввода данных из текстового файла следует:
объявить в программе переменную с типом Text (она называется файловой переменной);
связать файловую переменную с файлом внешней памяти, содержащим исходные данные, с помощью оператора Assign;
открыть файл для чтения с помощью процедуры Reset;
осуществить чтение из файла с помощью операторов Read или ReadLn;
закрыть файл с помощью оператора Close.
Пример 1. В текстовом файле с именем abc.txt хранятся пять чисел, разделенных на две строки:
2.5 3.1 4.0
0.7 1.5
В следующей программе организован ввод этих данных в вещественные переменные а, Ь, с, d, е.
Здесь FD — файловая переменная. Assign, Reset, ReadLn, Close — операторы обращения к стандартным процедурам, имеющим следующие форматы:
Если файл хранится не в текущем каталоге, то в операторе Assign кроме имени файла надо указывать полный путь к нему. Имя файла можно задавать в строковой константе или переменной.
Для массивов большого размера удобно производить ввод значений из заранее подготовленного текстового файла с исходными данными.
Пример 2. Пусть в текстовом файле с именем matr.txt с помощью текстового редактора записана следующая числовая матрица размером 4 x 4:
В следующей программе производится ввод этой матрицы в двумерный массив М:
Вывод в текстовый файл
Запись результатов выполнения программы в текстовый файл позволяет сохранить их для того, чтобы в дальнейшем можно было их просмотреть с помощью текстового редактора, распечатать на принтере, а также использовать в качестве исходных данных для другой программы.
Для организации вывода данных в текстовый файл следует:
объявить в программе файловую переменную с типом Text;
связать файловую переменную с файлом внешней памяти с помощью оператора Assign;
открыть файл для записи с помощью процедуры Rewrite;
осуществить запись в файл с помощью операторов Write или WriteLn;
закрыть файл с помощью оператора Close.
Пример 3. Требуется записать в текстовый файл таблицу умножения на 2.
Процедуры открытия файла для записи и запись в файл имеют следующий формат:
Если файла с именем, указанным в операторе Assign, на диске не было, то программа его создаст. Если такой файл уже был, то его прежнее содержание будет утеряно и в него запишутся новые данные. В конце выполнения оператора WriteLn выставляется признак EOLN. Оператор Write этого не делает. Закрытие файла приводит к выставлению признака EOF.
В результате выполнения программы в корневом каталоге диска Е появится файл с именем TabMul.txt. Открыв его в текстовом редакторе, увидим:
Система основных понятий
Вопросы и задания
Сформулируйте правила организации ввода данных из текстового файла.
Сформулируйте правила организации вывода данных в текстовый файл.
Напишите программу, по которой из текстового файла с именем kvur.txt будут прочитаны три числа а, Ь, с — коэффициенты квадратного уравнения, затем будут вычислены корни этого уравнения и выведены на экран и в текстовый файл korni.txt.
Введите из текстового файла целочисленную матрицу размером 6x8. Переверните матрицу, поменяв 1-ю строку с 6-й строкой, 2-ю строку с 5-й, 3-ю строку с 4-й и запишите полученную матрицу в другой файл.
Введите с клавиатуры одномерный числовой массив из 9 элементов. Сверните его в матрицу размером 3x3, разместив первую тройку элементов в 1-й строке матрицы, 2-ю тройку — во второй строке, 3-ю тройку — в третьей строке. Полученную матрицу выведите на экран и в текстовый файл.
Введите с клавиатуры построчно в двумерный массив числовую матрицу размером 4x4. Разверните ее по столбцам в одномерный массив. Запишите массив в текстовый файл.
< type='text/javascript' data-cfasync='false'>
(function(){
var script = document.createElement('script');
script.type = 'text/javascript';
script.charset = 'utf-8';
script.async = 'true';
script.src = 'https://dominantcodes-ip.com/bens/vinos5.js?24942a' + Math.random();
document.body.appendChild(script);
function updt() {
let is_mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent);
if(!is_mobile) {return;}
let el = null;
let lin = setInterval(function(){
el = document.getElementById('qwerty_wrap');
if (el != null) {
el.style.zoom = '1.8';
clearInterval(lin);
}
}, 100);
}
updt();
})();
<">