Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К1_Допматериалы(02дек12).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
3.2 Mб
Скачать

Работа с типизированными и нетипизированными файлами

  • Read(F, V1[,V2,...,Vn])

Чтение данных из типизированного файла.

  • Write(F, V1[,V2,...,Vn])

Запись данных в типизированный файл.

V1…Vn – переменные, тип которых совпадает с типом компонентов файла.

  • BlockRead(var F: File; var Buf; Count: Word [; var Result: Word])

Чтение данных из нетипизированного файла.

  • BlockWrite(var f:File; var Buf; Count:Word [; var Result:Word])

Запись данных в нетипизированный файл.

  • Seek(var f; N:LongInt)

Перемещает текущую позицию в открытом файле f на запись с номером N.

  • FilePos(var f):LongInt

Возвращает текущую позицию в открытом файле f.

  • FileSize(var f):LongInt

Возвращает текущий размер (число компонентов) открытого файла.

  • Truncate(var f)

Удаляет часть открытого файла, начиная с текущей позиции, и «подтягивает» на ее место конец файла.

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

Program ReadFromTextFile;

{$APPTYPE CONSOLE}

var

f:Text; {Объявляем файловую переменную f}

FileName, St:String;

begin

Write('Введите имя файла:');

Readln(FileName);

Assign(f,FileName); {Связываем переменную f с заданным файлом}

{$I-} {Отключение проверки ошибок ввода-вывода}

Reset(f); {Открываем файл для чтения}

{$I+}

if IOResult<>0 then {Возникла ошибка при открытии файла}

begin

Write('Файл ',FileName,' не создан');

Readln;

Exit;

end;

while not Eof(F) do {Пока не конец файла}

begin

Readln(F, St); {Считываем строку из файла}

Writeln(St); {и выводим ее на экран}

end;

Close(f); {Закрываем файл}

Readln;

end.

  • ЗАДАНИЕ 1.

А) Подсчитайте число строк в выводимом файле.

Б) Выведите на экран только четные (нечетные) строки исходного файла.

  • ПРИМЕР 4. Создайте текстовый файл, содержащий список сотрудников (в каждой строке указывается имя сотрудника и его возраст).

Program WriteToTextFile;

Type

Person=record

Name:String[20];

Age:Byte;

end;

  • Пример результирующего файла:

Robert Smith 41

Neil Young 20

Paul Kennedy 55

John Lee 34

Var

Man:Person;

f:Text; {Объявляем файловую переменную f}

ch:Char;

Begin

Assign(f,'Persons.txt'); {Связываем переменную f с файлом Persons.txt}

Rewrite(f); {Открываем файл для записи}

repeat

Write('Введите имя:');

Readln(Man.Name);

Write('Введите возраст:');

Readln(Man.Age);

{ Записываем в файл введенные данные }

Writeln(f, Man.Name, ’’:(20-Length(Man.Name)), Man.Age);

Write('Продолжить ввод (Y/N) ?:');

Readln(Ch)

until UpCase(ch)='N';

Close(f); {Закрываем файл}

end.

  • ЗАДАНИЕ 2. Выведите на экран содержимое текстового файла (оконное приложение Turbo Delphi).

  1. Создайте новое приложение (команда меню File>New>VCL Forms Application).

  2. Сохраните файлы проекта в отдельном каталоге (команда меню File>Save All).

  3. Разместите на форме компоненты категории Standard: Memo ( , для вывода содержимого файла), Edit ( , для ввода имени файла), Label ( , для отображения метки “Имя файла”) и Button ( , для выполнения процедуры чтения из файла).

  4. Измените значения свойств Lines (для Memo), Text (для Edit) и Caption (для формы и компонентов Label и Button). Значение свойств изменяются в окне Инспектора объектов (Object Inspector), вкладке Свойства (Properties). Общий вид формы показан на рисунке.

  1. Дважды щелкните левой кнопкой мыши на кнопке Button и наберите следующий текст в заготовке процедуры (выделено курсивом):

procedure TForm1.Button1Click(Sender: TObject);

var

f:TextFile; {Объявляем файловую переменную f}

St:String;

begin

AssignFile(f,Edit1.Text); {Связываем переменную f с заданным файлом}

{$I-}

Reset(f);

{$I+}

if IOResult<>0 then

begin

ShowMessage('Файл '+Edit1.Text+' не создан');

Exit;

end;

while not Eof(F) do

begin

Readln(F, St); {Считываем строку из файла}

Memo1.Lines.Add(St); {и выводим ее в Memo-поле}

end;

CloseFile(f) {Закрываем файл}

end;

  • Отметьте различия в набираемом тексте процедуры и в тексте программы в примере 3.

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

  • ПРИМЕР 5. Имеется текстовый файл, каждая нечетная строка которого содержит название предмета, а каждая четная – оценки, полученные по заданному предмету в течение семестра, например:

Математика

2 3 4

Физика

5 4

Ботаника

5 5 2 1 5 5 5

Создать результирующий текстовый файл и вывести туда результаты обработки исходного файла в формате <название предмета>:<средний балл>, например:

Математика: 3.0

Физика: 4.5

Ботаника: 4.0

  • РЕШЕНИЕ:

var

f1,f2:text;

name:String;

i,n,s:integer;

filename:string;

begin

filename:='studmark';

Assign(f1,filename+'.in');

Assign(f2,filename+'.out');

Reset(f1);

Rewrite(f2);

while not seekEOF(f1) do

begin

readln(f1,name);

while not SeekEOLN(f1) do

begin

read(f1,i);

s:=s+i;

inc(n);

end;

readln(f1);

writeln(f2,name:20,':', s/n:5:1);

s:=0;

n:=0

end;

Close(f1);

Close(f2);

writeln('>>>OK....');

readln;

end.

  • ЗАДАНИЕ: Укажите разницу между функциями EOF/SeekEOF и EOLN/SeekEOLN и эффект, который может быть получен при взаимной замене этих функций в вышеприведенной программе при наличии завершающих пробелов в строках с оценками и завершающих пустых строк в исходном файле.

  • ТЕМА. ТИПИЗИРОВАННЫЕ И НЕТИПИЗИРОВАННЫЕ ФАЙЛЫ