Учебный курс Программирование на Delphi. Модуль 12

Материал из НГПУ им. К.Минина
Перейти к: навигация, поиск
Текстовые файлы

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

Текстовый файл – это совокупность строк текста переменной длины. Доступ к информации, содержащейся в текстовом файле, может быть осуществлен только последовательно. Описание текстового файла имеет следующий вид:

                   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.
  • Форма с результатом работы программы

-10-1.JPG

Задание1

Таблица №12
Номер варианта Условие
1
Создать файл, содержащий сведения о пациентах поликлиники. Структура записи: ФИО пациента, год рождения, адрес, диагноз. Выбрать информацию о пациентах, обратившихся с диагнозом "грипп".
2
Создать файл, содержащий сведения о книгах, находящихся в читальном зале библиотеки. Каждая запись должна содержать: фамилию и инициалы автора, название книги, место издания, наименование издательства, год издания, количество страниц. Выбрать записи о книгах издательства "Высшая школа", выпущенных после 2000 года.
3
Создать файл, содержащий информацию о свободных местах в поездах. Запись содержит: дату выезда, номер поезда, конечный пункт назначения, время отправления, число свободных купейных мест, число свободных плацкартных мест. Выдать информацию об имеющихся свободных местах на определенное число.
4
Разработать программу ("электронную сваху") для поиска женихов и невест. Создать два файла: список женихов и список невест. В каждом списке кандидат (жених или невеста) характеризуется записью, содержащей порядковый номер кандидата; данные о кандидате (возраст, рост, вес); требования к партнеру (минимальное и максимальное значение соответствующего параметра). Сформировать списки пар с учетом требований кандидата.
5
Создать файл, содержащий сведения о студентах. Каждая запись должна содержать: номер по списку, фамилию, имя, отчество; год рождения; адрес. Выбрать сведения о студентах, проживающих в Нижнем Новгороде.
6
Создать файл, содержащий сведения о предметах, изучаемых на первом курсе. Запись должна содержать: название предмета, общее количество часов в семестре, количество часов в неделю. Выбрать информацию о предметах, количество часов в неделю для которых не меньше 4.
7
Создать файл, содержащий сведения о компьютерах. Структура записи: тип ПК, тактовая частота, объем ОП, объем винчестера, стоимость. Выбрать информацию о компьютерах, имеющих объем ОП более 128 Мбайт.
8
Создать файл, содержащий сведения о рейсах самолетов. Для каждого рейса указаны: номер рейса, тип самолета, пункт назначения, время вылета, дни вылета. Выбрать информацию о рейсах на Санкт- Петербург.
9
Создать файл, содержащий сведения об игрушках. Структура записи: название игрушки, ее стоимость, возрастные границы. Выбрать информацию об игрушках, цена которых не превышает 250 руб. и которые подходят детям 5 лет.
10
Создать файл, содержащий номера телефонов сотрудников. Структура записи: ФИО, номер телефона. Найти номер телефона сотрудника по его фамилии и инициалам.
11
Создать файл, содержащий сведения о результатах чемпионата по хоккею. Структура записи: название команды, результаты игры. Выбрать информацию о результатах игр команды "Торпедо".
12
Протокол лыжных гонок записать в файл. Для каждого участника указывается фамилия, время старта (чч: мм: сс), время финиша. Выбрать сведения об участниках, выполнивших норму заданного (1, 2, 3) разряда.
13
Сформировать файл, содержащий сведения о магазинах района. Структура записи: название магазина, адрес, фамилия директора. Выбрать информацию о магазинах, расположенных на проспекте Октября.
14
Сформировать файл, содержащий сведения о владельцах автомобилей: фамилия владельца, марка автомобиля, номер. Выбрать информацию о владельцах автомобилей, имеющих заданную марку автомобиля.


Типизированные файлы

Под записью понимается структура данных, объединяющая под одним именем данные различных типов. Записи состоят из фиксированного числа элементов, называемых полями. Поле - это переменная определенного типа. Различные поля могут иметь (в отличие от элементов массива) различный тип. Обращение к элементу записи выполняется с помощью составного (уточненного) имени. Первая часть составного имени - это имя записи, вторая часть - имя поля. Между именем записи и именем поля ставится точка: 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.
  • Форма с результатом работы программы

-9-1.JPG

Задание2

Номер варианта Условие
1
Создать файл, содержащий сведения о пациентах поликлиники. Структура записи: ФИО пациента, год рождения, адрес, диагноз. Выбрать информацию о пациентах, обратившихся с диагнозом "грипп".
2
Создать файл, содержащий сведения о книгах, находящихся в читальном зале библиотеки. Каждая запись должна содержать: фамилию и инициалы автора, название книги, место издания, наименование издательства, год издания, количество страниц. Выбрать записи о книгах издательства "Высшая школа", выпущенных после 2000 года.
3
Создать файл, содержащий информацию о свободных местах в поездах. Запись содержит: дату выезда, номер поезда, конечный пункт назначения, время отправления, число свободных купейных мест, число свободных плацкартных мест. Выдать информацию об имеющихся свободных местах на определенное число.
4
Разработать программу ("электронную сваху") для поиска женихов и невест. Создать два файла: список женихов и список невест. В каждом списке кандидат (жених или невеста) характеризуется записью, содержащей порядковый номер кандидата; данные о кандидате (возраст, рост, вес); требования к партнеру (минимальное и максимальное значение соответствующего параметра). Сформировать списки пар с учетом требований кандидата.
5
Создать файл, содержащий сведения о студентах. Каждая запись должна содержать: номер по списку, фамилию, имя, отчество; год рождения; адрес. Выбрать сведения о студентах, проживающих в Нижнем Новгороде.
6
Создать файл, содержащий сведения о предметах, изучаемых на первом курсе. Запись должна содержать: название предмета, общее количество часов в семестре, количество часов в неделю. Выбрать информацию о предметах, количество часов в неделю для которых не меньше 4.
7
Создать файл, содержащий сведения о компьютерах. Структура записи: тип ПК, тактовая частота, объем ОП, объем винчестера, стоимость. Выбрать информацию о компьютерах, имеющих объем ОП более 128 Мбайт.
8
Создать файл, содержащий сведения о рейсах самолетов. Для каждого рейса указаны: номер рейса, тип самолета, пункт назначения, время вылета, дни вылета. Выбрать информацию о рейсах на Санкт- Петербург.
9
Создать файл, содержащий сведения об игрушках. Структура записи: название игрушки, ее стоимость, возрастные границы. Выбрать информацию об игрушках, цена которых не превышает 250 руб. и которые подходят детям 5 лет.
10
Создать файл, содержащий номера телефонов сотрудников. Структура записи: ФИО, номер телефона. Найти номер телефона сотрудника по его фамилии и инициалам.
11
Создать файл, содержащий сведения о результатах чемпионата по хоккею. Структура записи: название команды, результаты игры. Выбрать информацию о результатах игр команды "Торпедо".
12
Протокол лыжных гонок записать в файл. Для каждого участника указывается фамилия, время старта (чч: мм: сс), время финиша. Выбрать сведения об участниках, выполнивших норму заданного (1, 2, 3) разряда.
13
Сформировать файл, содержащий сведения о магазинах района. Структура записи: название магазина, адрес, фамилия директора. Выбрать информацию о магазинах, расположенных на проспекте Октября.
14
Сформировать файл, содержащий сведения о владельцах автомобилей: фамилия владельца, марка автомобиля, номер. Выбрать информацию о владельцах автомобилей, имеющих заданную марку автомобиля.

Литература

  1. Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002
  2. Бобровский С. Delphi 7. Учебный курс. – СПб: Питер, 2003
  3. Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005.


Ссылки

Учебный курс Программирование на Delphi

Учебный план курса Программирование на Delphi