Учебный курс Программирование на Delphi. Модуль 12: различия между версиями
| (не показано 6 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
<center>'''Текстовые файлы'''</center> | <center>'''Текстовые файлы'''</center> | ||
| + | |||
| + | == Текстовые файлы == | ||
| + | Текстовый файл – это совокупность строк текста переменной длины. Доступ к информации, содержащейся в текстовом файле, может быть осуществлен только последовательно. | ||
| + | Описание текстового файла имеет следующий вид: | ||
| + | var < имя файловой переменной >: text; | ||
| + | Каждая строка в текстовом файле оканчивается составным символом «конца строки», который является объединением двух символов: символа #13 (CR) – возврат каретки и символа #10 (LF) – перевод строки. Для составного символа вводят обозначение eoln (End Of Line). | ||
| + | В конце любого файла, в том числе и текстового, ставится символ #26 (SUB) – конец файла eof (End Of File). | ||
| + | В текстовый файл можно записать и из него прочитать информацию любого типа. Если эта информация несимвольная, то в процессе чтения или записи происходит ее преобразование из символьной формы во внутреннюю и обратно. | ||
| + | Текстовый файл можно создать или преобразовать с помощью текстового редактора. Его можно просмотреть на экране дисплея или распечатать на принтере. | ||
| Строка 74: | Строка 83: | ||
*'''Форма с результатом работы программы''' | *'''Форма с результатом работы программы''' | ||
| − | + | [[Изображение:-10-1.JPG]] | |
==Задание1 == | ==Задание1 == | ||
| Строка 128: | Строка 137: | ||
| − | <center>'''Типизированные файлы'''</center> | + | == <center>'''Типизированные файлы'''</center> == |
| + | Под записью понимается структура данных, объединяющая под одним именем данные различных типов. Записи состоят из фиксированного числа элементов, называемых полями. Поле - это переменная определенного типа. Различные поля могут иметь (в отличие от элементов массива) различный тип. Обращение к элементу записи выполняется с помощью составного (уточненного) имени. Первая часть составного имени - это имя записи, вторая часть - имя поля. Между именем записи и именем поля ставится точка: ZAP.IMP, где ZAP - имя записи, IMP - имя поля. | ||
| + | |||
| + | При решении многочисленных задач обработки больших объемов информации используются файлы, которые позволяют запоминать, изменять, хранить и читать различную информацию на внешних носителях. Файл представляет собой структурированный тип данных, содержащий последовательность компонентов одного типа. Число элементов в файле (длина файла) не фиксировано. Это является основным отличием файла от массива. Файл, не содержащий ни одного элемента, называется пустым, его длина равна нулю. | ||
| + | |||
| + | Файл можно представить как магнитную ленту, у которой есть начало, а конец не фиксирован. Элементы файла записываются на эту ленту последовательно, друг за другом с помощью некоторого устройства (указателя файла). При чтении или записи этот указатель перемещается к следующему элементу и делает его доступным для обработки. В каждый момент доступен для записи (чтения) только этот элемент файла, на который установлен указатель. | ||
| + | При необходимости формирования или использования файла в разделе описаний программы должна быть описана файловая переменная. Описание файловой переменной имеет следующий вид: | ||
| + | |||
| + | type < имя типа > =file of < базовый тип >; | ||
| + | var < имя файловой переменной >: < имя типа >; | ||
| + | или | ||
| + | var < имя файловой переменной >: file of < базовый тип >; | ||
| + | |||
| + | В качестве базового типа элементов файла можно использовать любой тип данных (как простой, так и сложный), за исключением типа file. | ||
| + | |||
| + | Так как, по определению, число элементов файла не задается, то в Turbo Pascal введена стандартная функция Eof(var F: file): boolean; | ||
| + | |||
| + | Когда будет достигнут конец файла, Eof(F) примет значение True, в в противном случае - False. | ||
==Пример 2== | ==Пример 2== | ||
| Строка 221: | Строка 247: | ||
*'''Форма с результатом работы программы''' | *'''Форма с результатом работы программы''' | ||
| + | [[Изображение:-9-1.JPG]] | ||
| + | |||
| + | ==Задание2 == | ||
| + | {| border=1 | ||
| + | !Номер варианта||Условие | ||
| + | |- | ||
| + | | <center>1</center> ||Создать файл, содержащий сведения о пациентах поликлиники. Структура записи: ФИО пациента, год рождения, адрес, диагноз. Выбрать информацию о пациентах, обратившихся с диагнозом "грипп". | ||
| + | |- | ||
| + | |||
| + | |<center>2</center>||Создать файл, содержащий сведения о книгах, находящихся в читальном зале библиотеки. Каждая запись должна содержать: фамилию и инициалы автора, название книги, место издания, наименование издательства, год издания, количество страниц. Выбрать записи о книгах издательства "Высшая школа", выпущенных после 2000 года. | ||
| + | |- | ||
| + | |<center>3</center>||Создать файл, содержащий информацию о свободных местах в поездах. Запись содержит: дату выезда, номер поезда, конечный пункт назначения, время отправления, число свободных купейных мест, число свободных плацкартных мест. Выдать информацию об имеющихся свободных местах на определенное число. | ||
| + | |- | ||
| + | |<center>4</center>||Разработать программу ("электронную сваху") для поиска женихов и невест. Создать два файла: список женихов и список невест. В каждом списке кандидат (жених или невеста) характеризуется записью, содержащей порядковый номер кандидата; данные о кандидате (возраст, рост, вес); требования к партнеру (минимальное и максимальное значение соответствующего параметра). Сформировать списки пар с учетом требований кандидата. | ||
| + | |- | ||
| + | |<center>5</center>||Создать файл, содержащий сведения о студентах. Каждая запись должна содержать: номер по списку, фамилию, имя, отчество; год рождения; адрес. Выбрать сведения о студентах, проживающих в Нижнем Новгороде. | ||
| + | |- | ||
| + | |||
| + | |<center>6</center>||Создать файл, содержащий сведения о предметах, изучаемых на первом курсе. Запись должна содержать: название предмета, общее количество часов в семестре, количество часов в неделю. Выбрать информацию о предметах, количество часов в неделю для которых не меньше 4. | ||
| + | |- | ||
| + | |<center>7</center>||Создать файл, содержащий сведения о компьютерах. Структура записи: тип ПК, тактовая частота, объем ОП, объем винчестера, стоимость. Выбрать информацию о компьютерах, имеющих объем ОП более 128 Мбайт. | ||
| + | |- | ||
| + | |||
| + | |<center>8</center>||Создать файл, содержащий сведения о рейсах самолетов. Для каждого рейса указаны: номер рейса, тип самолета, пункт назначения, время вылета, дни вылета. Выбрать информацию о рейсах на Санкт- Петербург. | ||
| + | |- | ||
| + | |<center>9</center>||Создать файл, содержащий сведения об игрушках. Структура записи: название игрушки, ее стоимость, возрастные границы. Выбрать информацию об игрушках, цена которых не превышает 250 руб. и которые подходят детям 5 лет. | ||
| + | |- | ||
| + | |<center>10</center>||Создать файл, содержащий номера телефонов сотрудников. Структура записи: ФИО, номер телефона. Найти номер телефона сотрудника по его фамилии и инициалам. | ||
| + | |- | ||
| − | + | |<center>11</center>||Создать файл, содержащий сведения о результатах чемпионата по хоккею. Структура записи: название команды, результаты игры. Выбрать информацию о результатах игр команды "Торпедо". | |
| + | |- | ||
| + | |<center>12</center>||Протокол лыжных гонок записать в файл. Для каждого участника указывается фамилия, время старта (чч: мм: сс), время финиша. Выбрать сведения об участниках, выполнивших норму заданного (1, 2, 3) разряда. | ||
| + | |- | ||
| + | |<center>13</center>||Сформировать файл, содержащий сведения о магазинах района. Структура записи: название магазина, адрес, фамилия директора. Выбрать информацию о магазинах, расположенных на проспекте Октября. | ||
| + | |- | ||
| + | |<center>14</center>||Сформировать файл, содержащий сведения о владельцах автомобилей: фамилия владельца, марка автомобиля, номер. Выбрать информацию о владельцах автомобилей, имеющих заданную марку автомобиля. | ||
| + | |- | ||
| + | |} | ||
==Литература == | ==Литература == | ||
Текущая версия на 11:04, 20 мая 2008
Содержание
Текстовые файлы
Текстовый файл – это совокупность строк текста переменной длины. Доступ к информации, содержащейся в текстовом файле, может быть осуществлен только последовательно. Описание текстового файла имеет следующий вид:
var < имя файловой переменной >: text;
Каждая строка в текстовом файле оканчивается составным символом «конца строки», который является объединением двух символов: символа #13 (CR) – возврат каретки и символа #10 (LF) – перевод строки. Для составного символа вводят обозначение eoln (End Of Line). В конце любого файла, в том числе и текстового, ставится символ #26 (SUB) – конец файла eof (End Of File). В текстовый файл можно записать и из него прочитать информацию любого типа. Если эта информация несимвольная, то в процессе чтения или записи происходит ее преобразование из символьной формы во внутреннюю и обратно. Текстовый файл можно создать или преобразовать с помощью текстового редактора. Его можно просмотреть на экране дисплея или распечатать на принтере.
Пример 1
- Условие
В текстовом файле Note.txt определить длину самой большой строки.
- Использованные компоненты
BitBtn1 - кнопка выхода
BitBtn2 - Рабочая кнопка
Memo1 - поле вывода
- Программный код
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label1: TLabel;
Memo1: TMemo;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;
var
note:text;
max,k,i:integer;
c:char;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
assignfile(note,'c:\note.txt');
append(note);
for i:=0 to memo1.Lines.Count do
writeln(note,memo1.lines[i]);
closefile(note);
max:=0;
while not eof(note) do
begin
k:=0;
while not eoln (note) do
begin
read (note, c); k := k + 1;
end;
if k > max then max := k;
readln (note)
end;
label1.Caption:='Наибольшая строка имеет '+ inttostr(max)+' знаков';
closefile (note);
end;
end.
- Форма с результатом работы программы
Задание1
| Номер варианта | Условие | |
|---|---|---|
| Создать файл, содержащий сведения о пациентах поликлиники. Структура записи: ФИО пациента, год рождения, адрес, диагноз. Выбрать информацию о пациентах, обратившихся с диагнозом "грипп". | ||
| Создать файл, содержащий сведения о книгах, находящихся в читальном зале библиотеки. Каждая запись должна содержать: фамилию и инициалы автора, название книги, место издания, наименование издательства, год издания, количество страниц. Выбрать записи о книгах издательства "Высшая школа", выпущенных после 2000 года. | ||
| Создать файл, содержащий информацию о свободных местах в поездах. Запись содержит: дату выезда, номер поезда, конечный пункт назначения, время отправления, число свободных купейных мест, число свободных плацкартных мест. Выдать информацию об имеющихся свободных местах на определенное число. | ||
| Разработать программу ("электронную сваху") для поиска женихов и невест. Создать два файла: список женихов и список невест. В каждом списке кандидат (жених или невеста) характеризуется записью, содержащей порядковый номер кандидата; данные о кандидате (возраст, рост, вес); требования к партнеру (минимальное и максимальное значение соответствующего параметра). Сформировать списки пар с учетом требований кандидата. | ||
| Создать файл, содержащий сведения о студентах. Каждая запись должна содержать: номер по списку, фамилию, имя, отчество; год рождения; адрес. Выбрать сведения о студентах, проживающих в Нижнем Новгороде. | ||
| Создать файл, содержащий сведения о предметах, изучаемых на первом курсе. Запись должна содержать: название предмета, общее количество часов в семестре, количество часов в неделю. Выбрать информацию о предметах, количество часов в неделю для которых не меньше 4. | ||
| Создать файл, содержащий сведения о компьютерах. Структура записи: тип ПК, тактовая частота, объем ОП, объем винчестера, стоимость. Выбрать информацию о компьютерах, имеющих объем ОП более 128 Мбайт. | ||
| Создать файл, содержащий сведения о рейсах самолетов. Для каждого рейса указаны: номер рейса, тип самолета, пункт назначения, время вылета, дни вылета. Выбрать информацию о рейсах на Санкт- Петербург. | ||
| Создать файл, содержащий сведения об игрушках. Структура записи: название игрушки, ее стоимость, возрастные границы. Выбрать информацию об игрушках, цена которых не превышает 250 руб. и которые подходят детям 5 лет. | ||
| Создать файл, содержащий номера телефонов сотрудников. Структура записи: ФИО, номер телефона. Найти номер телефона сотрудника по его фамилии и инициалам. | ||
| Создать файл, содержащий сведения о результатах чемпионата по хоккею. Структура записи: название команды, результаты игры. Выбрать информацию о результатах игр команды "Торпедо". | ||
| Протокол лыжных гонок записать в файл. Для каждого участника указывается фамилия, время старта (чч: мм: сс), время финиша. Выбрать сведения об участниках, выполнивших норму заданного (1, 2, 3) разряда. | ||
| Сформировать файл, содержащий сведения о магазинах района. Структура записи: название магазина, адрес, фамилия директора. Выбрать информацию о магазинах, расположенных на проспекте Октября. | ||
| Сформировать файл, содержащий сведения о владельцах автомобилей: фамилия владельца, марка автомобиля, номер. Выбрать информацию о владельцах автомобилей, имеющих заданную марку автомобиля. |
Типизированные файлы
Под записью понимается структура данных, объединяющая под одним именем данные различных типов. Записи состоят из фиксированного числа элементов, называемых полями. Поле - это переменная определенного типа. Различные поля могут иметь (в отличие от элементов массива) различный тип. Обращение к элементу записи выполняется с помощью составного (уточненного) имени. Первая часть составного имени - это имя записи, вторая часть - имя поля. Между именем записи и именем поля ставится точка: ZAP.IMP, где ZAP - имя записи, IMP - имя поля.
При решении многочисленных задач обработки больших объемов информации используются файлы, которые позволяют запоминать, изменять, хранить и читать различную информацию на внешних носителях. Файл представляет собой структурированный тип данных, содержащий последовательность компонентов одного типа. Число элементов в файле (длина файла) не фиксировано. Это является основным отличием файла от массива. Файл, не содержащий ни одного элемента, называется пустым, его длина равна нулю.
Файл можно представить как магнитную ленту, у которой есть начало, а конец не фиксирован. Элементы файла записываются на эту ленту последовательно, друг за другом с помощью некоторого устройства (указателя файла). При чтении или записи этот указатель перемещается к следующему элементу и делает его доступным для обработки. В каждый момент доступен для записи (чтения) только этот элемент файла, на который установлен указатель. При необходимости формирования или использования файла в разделе описаний программы должна быть описана файловая переменная. Описание файловой переменной имеет следующий вид:
type < имя типа > =file of < базовый тип >;
var < имя файловой переменной >: < имя типа >;
или
var < имя файловой переменной >: file of < базовый тип >;
В качестве базового типа элементов файла можно использовать любой тип данных (как простой, так и сложный), за исключением типа file.
Так как, по определению, число элементов файла не задается, то в Turbo Pascal введена стандартная функция Eof(var F: file): boolean;
Когда будет достигнут конец файла, Eof(F) примет значение True, в в противном случае - False.
Пример 2
- Условие
Сформировать файл FM.DAT, содержащий экзаменационную ведомость одной студенческой группы. Записи файла состоят из следующих элементов: фамилия, имя, отчество; номер зачетной книжки; оценка. После записи файла осуществить поиск студентов, сдавших экзамен на 4 или 5.
- Использованные компоненты
Label1, Label2, Label3, Label4 - Пояснения
Edit1, Edit2, Edit3, Edit4 - Ввод исходных данных
BitBtn1 - Рабочая кнопка
BitBtn2 - Кнопка выхода
- Программный код
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
type stud=record
fio:string[30];
nz:string[6];
mark:2..5;
end;
var f:file of stud;
s:stud; n,i:integer; was:boolean;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
assignfile(f,'c:\fm.dat');
rewrite(f);
n:= strtoint(edit4.Text);
for i:=1 to n do
begin
s.fio:=edit1.text;
s.nz:=edit2.text;
s.mark:=strtoint(edit3.Text);
write(f,s);
end;
closefile(f);
messagedlg('файл сформирован',mtinformation,[mbok],0);
reset(f);
was:=false;
while not eof(f) do
begin
read(f,s);
if s.mark >= 4 then
begin
write( s.fio);
was:=true
end
end;
if was = false then
messagedlg('Записи не найдены',mtinformation,[mbok],0) ;
closefile(f)
end;
end.
- Форма с результатом работы программы
Задание2
| Номер варианта | Условие |
|---|---|
| Создать файл, содержащий сведения о пациентах поликлиники. Структура записи: ФИО пациента, год рождения, адрес, диагноз. Выбрать информацию о пациентах, обратившихся с диагнозом "грипп". | |
| Создать файл, содержащий сведения о книгах, находящихся в читальном зале библиотеки. Каждая запись должна содержать: фамилию и инициалы автора, название книги, место издания, наименование издательства, год издания, количество страниц. Выбрать записи о книгах издательства "Высшая школа", выпущенных после 2000 года. | |
| Создать файл, содержащий информацию о свободных местах в поездах. Запись содержит: дату выезда, номер поезда, конечный пункт назначения, время отправления, число свободных купейных мест, число свободных плацкартных мест. Выдать информацию об имеющихся свободных местах на определенное число. | |
| Разработать программу ("электронную сваху") для поиска женихов и невест. Создать два файла: список женихов и список невест. В каждом списке кандидат (жених или невеста) характеризуется записью, содержащей порядковый номер кандидата; данные о кандидате (возраст, рост, вес); требования к партнеру (минимальное и максимальное значение соответствующего параметра). Сформировать списки пар с учетом требований кандидата. | |
| Создать файл, содержащий сведения о студентах. Каждая запись должна содержать: номер по списку, фамилию, имя, отчество; год рождения; адрес. Выбрать сведения о студентах, проживающих в Нижнем Новгороде. | |
| Создать файл, содержащий сведения о предметах, изучаемых на первом курсе. Запись должна содержать: название предмета, общее количество часов в семестре, количество часов в неделю. Выбрать информацию о предметах, количество часов в неделю для которых не меньше 4. | |
| Создать файл, содержащий сведения о компьютерах. Структура записи: тип ПК, тактовая частота, объем ОП, объем винчестера, стоимость. Выбрать информацию о компьютерах, имеющих объем ОП более 128 Мбайт. | |
| Создать файл, содержащий сведения о рейсах самолетов. Для каждого рейса указаны: номер рейса, тип самолета, пункт назначения, время вылета, дни вылета. Выбрать информацию о рейсах на Санкт- Петербург. | |
| Создать файл, содержащий сведения об игрушках. Структура записи: название игрушки, ее стоимость, возрастные границы. Выбрать информацию об игрушках, цена которых не превышает 250 руб. и которые подходят детям 5 лет. | |
| Создать файл, содержащий номера телефонов сотрудников. Структура записи: ФИО, номер телефона. Найти номер телефона сотрудника по его фамилии и инициалам. | |
| Создать файл, содержащий сведения о результатах чемпионата по хоккею. Структура записи: название команды, результаты игры. Выбрать информацию о результатах игр команды "Торпедо". | |
| Протокол лыжных гонок записать в файл. Для каждого участника указывается фамилия, время старта (чч: мм: сс), время финиша. Выбрать сведения об участниках, выполнивших норму заданного (1, 2, 3) разряда. | |
| Сформировать файл, содержащий сведения о магазинах района. Структура записи: название магазина, адрес, фамилия директора. Выбрать информацию о магазинах, расположенных на проспекте Октября. | |
| Сформировать файл, содержащий сведения о владельцах автомобилей: фамилия владельца, марка автомобиля, номер. Выбрать информацию о владельцах автомобилей, имеющих заданную марку автомобиля. |
Литература
- Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002
- Бобровский С. Delphi 7. Учебный курс. – СПб: Питер, 2003
- Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005.