Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Обработка исключительных ситуаций

Урок _. Файлы. Текстовые файлы

План урока

  • Понятие файла, файловая переменная.
  • Классификация файлов в Turbo Pascal.
  • Текстовые файлы.
  • Стандартные процедуры и функции для работы с текстовыми файлами.
  • Порядок работы с файлом.
  • Задачи.

 

 

  • Понятие файла. Файловая переменная

Данные, размещаемые в оперативной памяти компьютера, исчезают при выключении питания. Для долговременного хранения данных используются внешние носители. Единицей хранения информации на диске служит файл (единица представления информации – бит, единица передачи и обработки– байт).

 

Словом «файл» в программировании называется несколько понятий.

Во-первых, это именованная область внешней памяти. Файл в таком понимании называют физическим файлом. Физический файл представляет собой последовательность байт памяти носителя информации – диска, карты памяти. Файл имеет имя, и это имя относится к операционной системе (а не к среде программирования).

 

Во-вторых, файл – это структура данных, используемых в программировании. Файл в таком понимании называют логическим файлом. Структура логического файла – это способ восприятия файла, образно говоря, это «окно» через которое мы смотрим на физический файл. Чтобы в программе можно было как-то с файлом работать, ему присваивается имя, являющееся обычной переменной.

 

Существуют средства установки соответствия между этими именами (процедура assign). Иными словами, в Turbo Pascal мы используем одно имя файла, а операционная система, осуществляющая чтение и запись на диск, работает с другим именем.

Логический файл описывается как переменная одного из файловых типов, определенных в Turbo Pascal. После того как в программе в разделе описания переменных объявлена файловая переменная, она может быть использована как средство общения с любым физическим файлом. Само имя физического файла появляется в программе один раз, когда устанавливается соответствие имен физического и логического файла.

 

  • Классификация файлов в Turbo Pascal

 

Файлы классифицируются по двум признакам:

по типу (логической структуре) – текстовые, типизированные, нетипизированные;

по методу доступа к элементам файла – последовательного и прямого доступа.

Метод доступа определяется типом файла.

 

Примеры:

Var f1: text; // textfile

F2: file of integer;

F3: file;

 

На этом занятии мы остановимся на работе с текстовыми файлами.


  • Текстовые файлы

 

Текстовые файлы являются файлами последовательного доступа. Это значит, что невозможно прочитать (или записать) какой либо элемент, не прочитав (или записав) все предыдущие. При чтении или записи элемента в файл текущая позиция файла перемещается к следующему по порядку элементу.

 

Информация хранится в текстовых файлах в виде последовательности символов (коды ASCII). Символы составляют строки произвольной длины. В конце каждой строки записываются два управляющих символа #13#10 (возврат каретки и перевод строки), которые отделяют строку от следующей. В конце файла записывается символ #26 – конец файла (CTRL+Z).

 

Код Код код eoln Код Код eoln Код ... Код eof

 

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

На чтение можно открыть только существующий файл - процедура reset.

Новый файл можно создать и открыть на запись с помощью процедуры rewrite. Если на запись открывается существующий файл, то он автоматически обнуляется, его старое содержимое является безвозвратно утерянным.

 

С большинством правил чтения данных из текстовых файлов и записи в них результатов работы программы мы знакомы с момента написания первых программ. Дело в том, что в момент начала работы программы всегда автоматически открываются стандартные текстовые файловые переменные input и output.

Input – это доступный только для чтения файл, связанный с клавиатурой, а output – это открытый на запись файл, связанный с монитором. И хорошо известные вам процедуры read(ln) и write(ln) – это процедуры чтения и записи в файл соответственно. Если имя файловой переменной не указывается, то чтение происходит из стандартного файла input, а запись – в стандартный файл output.

 

  • Стандартные процедуры и функции для работы с текстовыми файлами

 

Assign(f, s) Ставит в соответствие файловой переменной f имя внешнего файла, которое задается в строковой переменной s или константе.
Reset(f) Открывает существующий файл f на чтение.
Rewrite(f) Открывает файл f на запись
Append(f) Открывает существующий файл f для дописывания.
Close(f) Закрывает открытый файл.
Eof(f): boolean Проверяет, достигнут ли при чтении из файла f конец файла.
Eoln(f): boolean Проверяет, достигнут ли при чтении из файла f конец строки.
SeekEof(f): boolean Проверяет, достигнут ли при чтении из файла f конец файла, пропуская разделители (пробелы, символы табуляции, перевод строки).
SeekEoln(f): boolean Проверяет, достигнут ли при чтении из файла f конец строки, пропуская разделители (пробелы, символы табуляции, перевод строки).
Write(f, список параметров) Записывает в файл f значения параметров.
Writeln (f, список параметров) То же, что и wriet(), но добавляет к файлу символы конца строки.
Read(f, список переменных) Считывает значения из файла f в переменные.
Readln(f, список переменных) Считывает значения из файла f в переменные, а затем делает пропуск до начала следующей строки текстового файла.
SetTextBuf(f, buf) Назначает для текстового файла буфер ввода/вывода.
Flush(f) Сбрасывает буфер вывода в файл f, открытый на запись.

 

  • Порядок работы с файлом
  1. Описать файловую переменную требуемого типа, например:

Var f: text;

  1. Связать физический файл с описанным логическим файлом:

Assign(f, ’test.txt’); или s: =’a: \example\test.pas’;

Assign(f, s);

  1. Открыть файл на чтение или запись:

Reset(f) – открывает существующий физический файл для чтения. Указатель текущей позиции устанавливается в начало файла.

Rewrite(f) – создает новый физический файл. Если такой файл существует, то на его место записывается новый пустой файл. Указатель текущей позиции устанавливается в начало файла.

  1. Закрыть файл:

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

Обработка исключительных ситуаций

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

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

Program ex_1;

Uses crt;

Var f: text;

S: string;

Begin Clrscr;

{обработка возможных ошибок}

assign(f, ’one.txt’);

{$I-}

reset(f);

{$I+}

if IOResult < > 0 then writeln(‘файл с таким именем не найден’)

else begin {файл найден и открыт на чтение }

while not eof(f) do begin

readln(f, s);

writeln(s); { по умолчанию в файл output }

end;

close (f);

end;

end.

Внесите изменения в текст, чтобы происходил посимвольный вывод:

Program ex_2;

Uses crt;

Var f: text;

S: char;

Begin Clrscr;

{$I-} {обработка возможных ошибок}

assign(f, ’one.txt’);

reset(f);

{$I+}

if IOResult < > 0 then writeln(‘файл с таким именем не найден’)

else begin {файл найден и открыт на чтение }

while not eof(f) do begin

read (f, s);

write (s); { по умолчанию в файл output }

end;

close (f);

end;

end.

 

Пример 2. Прочитать из файла четвертый элемент.

Program ex_3;

Var f: text;

I, x: integer;

Begin

Clrscr;

{$I-} {обработка возможных ошибок}

assign (f, ’two.txt’);

reset (f);

{$I+}

if IOResult < > 0 then writeln (‘файл с таким именем не найден’)

else begin {файл найден и открыт на чтение }

i: =0;

while (not eof (f)) and (I < 4) do begin

read (f, x);

I: =i+1;

end;

writeln(‘четвертый элемент = ‘, x);

reset(f); {переустанавливает текущий указатель на первую позицию, если необходимо }

...

close (f);

end;

end.

Задачи

  1. Дан текстовый файл, содержащий целые числа.

Найти:

- сумму чисел в файле

- количество чисел в файле;

- все четные числа переписать в выходной файл;

- все простые числа переписать в выходной файл

 

Результат выведите в файл ‘out.txt’.

 

  1. Удалить из файла все вхождения заданного символа (переписать в новый файл).
  2. Подсчитать в текстовом файле отдельно число цифр и латинских букв (используем множества).

Type charset = set of char;

Const digits: charset=[‘0’..’9’];

Letters: charset=[‘a’..’z’, ’A’..’Z’];

...

 

 

  1. Считаем, что длина строк в файле не превышает 80 символов. Преобразовать файл так, чтобы все строки были отцентрированы.

...

readln(f, s);

h: =(80 - length(s))div 2;

sr: =’’;

for i: =1 to h do sr: =sr+’ ‘; {можно писать пробелы по одному в файл, }

sr: =sr+s; {но по времени эта операция гораздо дольше}

writeln(f, sr);

...

 

Решение

Задача 1

 

uses crt;

var x: integer;

s, max: integer;

f: text;

begin

clrscr;

{$I-}

assign(f, 'isx.pas');

reset(f);

{$I+}

if ioresult< > 0 then write('try again')

else

begin

s: =0; max: =-32767;

while not eof(f) do

begin

while not eoln(f) do

begin

read(f, x);

s: =s+x;

if max< x then max: =x;

end;

readln(f);

end;

close(f);

append(f);

writeln(f);

writeln(f, 's==> ', s);

writeln(f, 'max==> ', max);

close(f);

end;

END.


procedure TForm1.Button1Click(Sender: TObject);

 

begin

if opendialog1.Execute then

begin

s: =opendialog1.filename;

form1.Caption: =s;

memo1.Lines.LoadFromFile(S);

//-----------

assignfile(f, s);

reset(f);

while not (eof(f)) do

begin

readln(f, s)

 

 

end;

 

end;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

 

var s: string;

begin

if savedialog1.Execute then

begin

s: =savedialog1.filename;

//form1.Caption: =s;

//assignfile(f, s);

//reset(f);

 

 

memo1.Lines.savetofile(s);

end;

end;

<== предыдущая лекция | следующая лекция ==>
Речевые игры | Условия пребывания и участия ребенка, обязательства




© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.