РефератыИнформатикаОбОбработка последовательных файлов в программе

Обработка последовательных файлов в программе



Обработка последовательных файлов в программе



Кузнецова В. С., преподаватель информатики,
МОУ межшкольный учебный комбинат №2, г. Хабаровск


Одним из трудных для учащихся и преподавателей разделов программирования является программирование обработки файлов. В Хабаровском межшкольном учебном комбинате №2 накоплен определенный опыт по обучению школьников приемам программирования, в том числе, при работе с файлами. Предлагаем вниманию читателей материал на эту тему, подготовленный В.С. Кузнецовой.


В разделе алгоритмизация и программирование мы работаем в основном с простыми типами данных и только одним из сложных (структурных) типов данных – массивами, при этом опускается работа с файлами данных. Это связано с тем, что в учебном плане мало учебных часов отводится на данный раздел. Несмотря на нехватку времени, желательно в конце раздела рассмотреть тему "Обработка последовательных файлов в программе". Учащиеся уже должны знать, что такое файл. Поэтому занятие необходимо начать с восстановления опорных знаний:


Что такое файл?


Какими способами можно создать файл?


Каким способом вводили данные в программу?


Каким способом выводили данные из программы?


Какие операторы при этом использовали?


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


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


Пусть данные записаны на диске в файле File1.dat. Как к ним обратиться из программы? Для этого необходимо в программе предусмотреть:


Связь имени файла с каналом ввода – вывода и объявить его открытым.


Объявить способ доступа к файлу (последовательный или прямой).


Переслать данные.


Закрыть канал ввода – вывода, связанный с файлом.


Рассмотрим операторы, с помощью которых осуществляется эта работа на языках программирования Бейсик и Паскаль.


На языке программирования Бейсик.


Оператор OPEN "открывает" файл, т.е. делает файл на диске известным программе, связывает имя файла на диске с номером канала ввода – вывода в программе и указывает режим работы с файлом.


Формат:


Open "имя файла" [for режим] as # номер канала [len=размер записи]


Режимы для последовательных файлов:


INPUT - для чтения


OUTPUT - для записи


APPEND - для добавления данных в файл.


Пример:


Open "File1.dat" for input as #1


Оператор PRINT # предназначен для вывода данных в файл.


Формат: PRINT #номер канала, имя переменной


Пример:


Print #1, fam$(i), sum(i)


Оператор INPUT # предназначен для ввода переменных из файла (так же как это делает оператор INPUT при их вводе с клавиатуры).


Формат: INPUT #номер канала, список переменных


Пример:


Input #1, fam$(i), kol(i)


Функция EOF позволяет определить конец файла.


Формат: EOF(номер канала)


Оператор CLOSE # "закрывает" файл, т.е. отсоединяет его от программы и освобождает в ней канал ввода - вывода.


Формат: CLOSE #номер канала


Задача: Рассчитать зарплату на каждого члена бригады и записать в файл File2.dat данные фамилию члена бригады и его зарплату с учетом подоходного налога. Данные по каждому члену бригады (фамилия и количество сделанных изделий) содержатся в файле File1.dat. Примечание: количество членов бригады, стоимость изделия и процент на зарплату от прибыли ввести с клавиатуры.


Input " количество членов бригады ";n


Input " стоимость изделия";r


Input " процент на зарплату от прибыли ";p


p = p/100


Dim fam(n), kol(n), sum(n)


Open "File1.dat" for input as #1


for i = 1 to n


Input #1, fam$(i), kol(i)


sum(i) = kol(i)*r*p*0.13


next i


Close #1


Open "File2.dat" for output as #1


for i = 1 to n


Print #1, fam$(i), sum(i)


next i :Close #1


На языке программирования Паскаль.


В Турбо Паскале различают текстовые файлы, типизированные файлы и нетипизированные файлы. При работе с файлами ключевым понятием является понятие переменной файлового типа или файловой переменной и описывается она в разделе переменных в зависимости от класса файла. Для текстовых файлов файловая переменная принадлежит стандартному типу Text. Файловая переменная (ф.п.) связывается с именем файла с помощью оператора ASSIGN.


Формат:


Assign (<ф.п.>,'<путь к файлу> <имя файла>');


Он должен быть первым среди операторов, работающих с файлом. Прежде, чем начать работать с файлом его нужно "открыть". Оператор RESET открывает уже существующий файл, а оператор REWRITE открывает

новый файл или файл, содержимое которого полностью заменяется.


Форматы:


Reset (<ф.п.>);


Rewrite (< ф.п.>);


Для чтения данных из файла используются процедуры READLN, READ, BLOCKREAD.


Формат:


Readln (< ф.п.>, <переменная>);


Для записи данных в файл используются процедуры WRITELN, WRITE, BLOCKWRITE.


Формат:


Writeln (< ф.п.>, <переменная>);


После завершения работы с файлом , его необходимо "закрыть" оператором Close.


Формат: Close (< ф.п.>);


Уничтожить ненужный файл оператором Erase (< ф.п.>), а переименовать файл – оператором Rename (< ф.п.>,<строка>), где строка представляет новое имя файла.


Текстовый файл трактуется в Турбо Паскале как совокупность строк переменной длины. Доступ к каждой строке последовательный, начиная с первой. В конце каждой строки ставится маркер EOLN (End Of Line - конец строки) , а в конце всего файла маркер EOF (End Of File – конец файла).


Рассмотрим работу с файлами на примерах.


Пример 1.


На диске а: записан файл posl.txt, в каждой строке которого записана пословица. Определить сколько букв в каждой пословице и вывести результат вычисления на экран.


program texst;


var f: text; {* файловая переменная *}


s: integer; {* число букв *}


sim: char; {* символ *}


begin


Assign (f, 'a:posl.txt');


reset (f); {* открытие файла *}


while not eof (f) do {* проверка конца файла *}


begin


s:=0;


while not eoln (f) do {* проверка конца строки *}


begin


read(f, sim);


if (sim<>' ') or (sim<>',') then s:=s+1;


end;


writeln('число букв в пословице ',s);


readln(f); {* переход на новую строку *}


end;


Close(f) {**}


end.


Пример 2.


В существующем файле dan1.dat записана матрица из целых чисел. В новый файл dan2.dat переписать данную матрицу и добавить в каждую строку слово "сумма=" и результат вычисления суммы чисел в данной строке.


Program matrica;


var f1,f2: text;


x, s: integer;


begin


Assign (f1, 'dan1.dat');


Reset (f1); {* открытие файла для чтения *}


Assign (f2, 'dan2.dat');


Rewrite (f2); {* открытие файла для записи *}


While not eof (f1) do


begin


s:=0;


While not eoln (f1) do


begin


Read(f1,x);


Write(f2,x);


s:= s + x;


end;


Writeln (f2,' ',' сумма=',s);


Readln(f1);


end;


close(f1); close(f2);


Writeln ('Работа завершена, файл создан на диске');


end.


При выполнении операций ввода-вывода данных по умолчанию автоматически производится проверка на возникновение ошибки. При обнаружении ошибки выполнение программы прекращается. Но в программе можно предусмотреть собственную реакцию на ошибочные ситуации. Для этого в начале "опасного" фрагмента отключается автоматическая проверка {$I-}. При возникновении ошибки формируется код, который обрабатывается функцией IOResult. Функция IOResult возвращает в программу код ошибки, обнуляет этот код, поэтому последующие обращения к этой функции будут давать нулевой результат, пока какая-либо операция не закончится аварийно.


Пример:


Assign (f, 'file1.dat');


{$I-} {* отключаем автоматическую проверку *}


Reset (f);


code:= IOResult; {* получили код результата *}


if code <> 0 then


begin {* возникла ошибка *}


write (' Ошибка при открытии файла ');


case code of


1: write('файл не найден');


3: write('маршрут не найден');


4: write('слишком много открытых файлов');


5: write('запрет доступа к файлу');


12: write('некорректный код доступа к файлам');


else


……..


end


end;


{$I-} {* включаем автоматическую проверку *}


…………………….


После рассмотренных примеров можно предложить задачи для самостоятельной работы.


Задача 1. Данные об абитуриентах (фамилия, имя, отчество, средний балл аттестата) содержатся в файле F1.txt. Напишите программу, которая запрашивала бы отметки всех сданных экзамен каждого абитуриента и формировала новый файл F2,.txt в который вошли бы следующие сведения об абитуриентах: фамилия, имя, отчество, средний балл аттестата, отметка1, отметка2, отметка3.


Задача 2. Данные о налогоплательщиках (фамилия, имя, отчество, адрес) находятся в файле F1.txt. Написать программу, которая выводила эти сведения в таблицу:












Фамилия, имя, отчество


адрес


доход


налог



Доход ввести с клавиатуры. Налог рассчитать 15% от дохода. Доход и налог вывести в таблицу.


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

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Обработка последовательных файлов в программе

Слов:1321
Символов:11369
Размер:22.21 Кб.