Работа 1.работа с текстовыми фаылами

Тема. Работа с текстовыми файлами. Урок из серии: "Язык программирования Паскаль"
На олимпиадах, начиная с областных, они используются для ввода и вывода данных. Лучше всего попробовать работать с файлами до того, как Вы пойдете на олимпиаду.
На этом уроке мы рассмотрим, как используются текстовые файлы для ввода и вывода данных в программе на языке Паскаль.
Текстовые файлы – это файлы, содержащие символы, разделенные на строки. Причем в конце каждой строки стоит символ конца строки.
Общая последовательность действий при работе с файлами в языке программирования Паскаль:
описать переменную файлового типа;
связать ее с конкретным физическим файлом процедурой Assign;
открыть файл для чтения процедурой ReSet или для записи процедурой ReWrite;
выполнить чтение или запись информации;
по окончании работы с файлом закрыть файл процедурой Close.
Описание переменной файлового типа
С текстовым файлом на диске в программе должна быть связана файловая переменная, которая описывается с указанием стандартного типа Text:
Var <имя файловой переменной>: Text;
Связь переменной файлового типа с конкретным внешним файлом
Для установления связи между файловой переменной и именем файла, присваиваемого операционной системой, имеется стандартная процедура Assign.
Общий вид:
Assign (<имя файловой переменной >, <имя внешнего файла>’);
Например,
Assign(F1, int.dat’)
Такое соответствие означает, что все операции, выполняемые над переменной F1, будут выполняться над файлом, хранящемся на диске и имеющим имя 'Int.dat'
Чтение из файла
Под чтением из файла понимается ввод данных из внешнего файла, находящегося на диске в оперативную память. Данные входного файла становятся доступными программе.
Для чтения файла в программе необходимо выполнить следующие действия:
Открыть файл для чтения:
Reset (<имя файловой переменной >)’;
Прочитать данные файла в программу с помощью процедуры Read или Readln .
Процедура Read последовательно считывает все элементы строки:
Read(<имя файловой переменной >,<элемент>)
Процедура Readln – считывает элемент из текущей строки и переходит на следующую строку (независимо от того, достигнут конец строки или нет):
Readln(<имя файловой переменной >,<элемент>)
Если не указывать второй параметр, то произойдет переход в начало следующей строки без ввода данных:
Readln (<имя файловой переменной>)
Закрытие файла
После завершения работы с файлом, его нужно закрыть и «освободить» файловую переменную. Это делается с помощью процедуры Сlose.
Общий вид оператора:
Close(<файловой переменной >)
Общая форма чтения файла имеет вид:
Reset(<имя файловой переменной >); {открыть файл для чтения} Read(<имя файловой переменной ><'элемент>); {считать из файла элемент} Close(<имя файловой переменной >);{закрыть файл}
Многоточием отмечено наличие других операторов в программе.
Признак конца файла
Так как, по определению, число элементов файла не задается заранее, то в языке Паскаль введена логическая функция Eof() для определения признака конца файла.
Общий вид функции:
eof(<файловой переменной>).
Она определяет, достигнут ли конец файла или еще нет (принимает значение (true), если достигнут конец файла, и ложь (false) - в противном случае).
Для определения конца файла используется оператор цикла, например, (пока не достигнут конец файла ):
While Not EOF (<имя файловой переменной >) Do
Запись в файл
Под записью файла понимается вывод результатов программы из оперативной памяти на диск, т.е. создание нового файла на внешнем устройстве.
Для записи файла в программе необходимо выполнить следующие действия:
Открыть файл для записи с помощью процедуры  Rewrite:
rewrite (<имя файловой переменной>);
Записать данные в файл с помощью процедур Write или Writeln.
Процедура Write производит запись поэлементно в текущую строку:
Write (<имя файловой переменной >, <элемент>);
Процедура WriteLn записывает элемент и переводит указатель в начало следующей строки:
Writeln (<имя файловой переменной >,<элемент>).
Если не указывать второй параметр процедуры, то в конце данной строки ставится признак конца файла и текущий указатель перемещается на начало следующей строки:
WriteLn(<имя файловой переменной >)
После завершения работы с файлом его закрытие обязательно.
Общая форма записи файла имеет вид:
ReWrite(<имя файловой переменной >); {открыть файл для записи} Write(<имя файловой переменной >,<элемент>) ; {Записать элемент в файл} Close(<имя файловой переменной >);        {закрыть файл}
Логическая функция Eoln()
Часто для обработки текстовых файлов используется специфичная для них функция Eoln(), позволяющая определить, достигнут ли конец строки. Если достигнут - значение функции равно True, а если нет - False.
Таким образом, для анализа конкретных символов строк файла можно применить вложенный цикл типа:
while not Eoln(FileName) do {пока не достигнут конец очередной строки, делай}
    begin
    {группа операторов обработки символов очередной строки}
    end;
Пример. Дан текстовый файл, содержащий только целые числа, в каждой строке может быть несколько чисел, которые разделяются пробелами. Вывести на экран все числа с учетом разбиения на строки и подсчитать количество элементов в каждой строке.
Решение.
Пусть в файле содержится следующая информация:
-32 16 0 8 7 4 5 9 13 11 -5 -8 6 -8 0 12 1 2 -1 -2 -4 -1 -2 4
Этот файл можно создать в среде Паскаль следующим образом:
Создать новый файл (команда Файл-Новый).
Записать все числа в строке через пробелы.
Сохранить его, например, как primer1.dat’. Для этого в диалоговом окне сохранения файла в списке Тип файла выбрать Все файлы. В поле Имя файла ввести полное имя файла (имя с расширением).
Программа будет иметь следующий вид:
program Primer_1;
var f:text;
x,k: integer;
begin
assign(F,'primer1.dat'); {связываем с внешним файлом}
reset(F);            {открываем для чтения}
while not eof(f) do  {пока не конец файла}
begin
k:=0;              {начальное количество элементов строки}
while not eoln(f)do {пока не конец строки}
begin
read(f,x);     {считываем очередное число}
write(x,' ');  {выводим его на экран}
k:=k+1;        {увеличиваем счетчик, можно использовать функцию inc(k);}
end;
writeln('в строке ',k,' элементов');
readln(f);        {переходим к следующей строке файла}
end;
close(f);
end.

Пример 2. Пусть на диске имеется файл с именем d1.dat, в котором записаны данные: 0.54 1.7 4.56 0.2 1.32 1.524 18 0.98 5.6 7.7
Необходимо сделать эти данные доступными программе и вычислить их сумму.
Решение. Программа находится на диске c:\f1.pas
program fff1; var f1:text;l1:integer; x,sum:real; begin sum:=0; l1:=1; assign(f1,'c:d1.dat'); reset(f1); while not eof(f1) do begin while not eoln(f1) do begin read(f1,x); sum:=sum+x; end; readln(f1); end; write('сумма=',sum:8:3); close(f1); end. Ответ: 42.124
Пример 3. Пусть переменная a и b получают следующие значения: a=510, b=16.2. Требуется записать в файл с именем d2.dan строку в виде: a=510 b=16.2
Решение. Программа находится на диске c:\ f2.pas
program fff2; var f2:text;l2,a:integer; b:real; begin l2:=1; assign(f2,'c:d2.dat'); a:=510;b:=16.2; rewrite(f2); write(f2,'a=',a:3,' ','b=',b:4:1); close(f2); end.
Пример 3. Имеется ведомость по результатам экзамена в группе. Будем считать его входным файлом с именем dan.pas: ------------------------- предмет "физика" группа т-12 ------------------------- Алексеев С.А. :5 Вертышев А.Ю. :4 Колдаев В.Д. :5 Петрова Н.Д. :4 Федоренко Р.Ф. :3 Шаронин А.В. :4 Cоставить программу создания выходного файла с именем rez.pas, в котором следует записать исходную ведомость и вычисленный средний балл: *************************** средний балл в группе 4.17 количество учащихся 6
Решение. Программа находится на диске c:\f3.pas
program fff3; var finp,fout:text;l1,l2,n,c:integer; sr,sum:real;smb:char; begin l1:=1;assign(finp,'c:dan.pas'); l2:=1; assign(fout,'c:rez.pas'); reset(finp); rewrite(fout); n:=0;sum:=0; while not eof(finp) do begin while not eoln(finp) do begin read(finp,smb); write(fout,smb); if smb=':' then begin read(finp,c); write(fout,c:3); sum:=sum+c; n:=n+1; end; end; readln(finp); writeln(fout); end; sr:=sum/n; writeln(fout,'***************************'); writeln(fout,'средний балл в группе',sr:5:2); writeln(fout,'количество учащихся',n:4); writeln('вычисления закончены,',' результаты смотрите в файле rez.pas'); close(fout); close(finp); end. ОТВЕТ: ------------------------- предмет "физика" группа т-12 ------------------------- Алексеев С.А. : 5 Вертышев А.Ю. : 4 Колдаев В.Д. : 5 Петрова Н.Д. : 4 Федоренко Р.Ф. : 3 Шаронин А.В. : 4 *************************** средний балл в группе 4.17 количество учащихся 6
Пример 4. В файле dan1.dat записаны целые числа в нескольких строках. 3 5 2 4 9 1 1 7 1 6 2 8
Вычислить сумму элементов каждой строки и результаты вместе с исходными данными поместить в файл с именем dan2.dat
Решение. Программа находится на диске c:\ f4.pas
program fff4; var f1,f2:text;lin1,lin2,x,sum:integer; begin sum:=0; assign(f1,'c:dan1.dat'); assign(f2,'c:dan2.dat'); reset(f1); rewrite(f2); sum:=0; while not eof(f1) do begin sum:=0; while not eoln(f1) do begin read(f1,x); write(f2,x:3); sum:=sum+x; end; writeln(f2,' ':3,'сумма',sum:4); readln(f1); end; writeln('Результат находится в файле dan2.dat'); close(f1); close(f2); end. Ответ: 3 5 2 сумма 10 4 9 1 сумма 14 1 7 1 сумма 9 6 2 8 сумма 16

Заголовок 415

Приложенные файлы


Добавить комментарий