2 Сем (Текстовый редактор и задания)

Посмотреть архив целиком

      1. 9

        Упр 2 Сем 2 Создание текстового редактора для работ с текстовыми файлами


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

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

Результат работы – программа-редактор, предоставляющая пользователю основные функции по созданию, сохранению и обработке с диалогами текстовых файлов.


  1. Создание макета формы.

Запустите Turbo Delphi, (или если Turbo Delphi уже запущена) введите команду File\New\VCL Forms ApplicationDelphi for Win32

Макет формы представляет образ формы в интегрированной среде разработки программы с размещенными на ней компонентами.

Компонентом называют размещаемый на макете формы имеющий образ объект, а также соответствующий значок в Палитре компонентов, предоставляющий определённые функциональные возможности для разрабатываемой программы. Компоненты Delphi представляют классы, имеющие такие же имена, но с префиксом T. Например, компонент Memo – многострочный текстовый редактор класса TMemo позволяет хранить строки текста, отображать их в своём окне, иметь полосы прокрутки, выделять фрагменты текста и работать с выделенными фрагментами и т.д.

    1. Разместите на форме компонент Memo1 (панель инструментов Standard). Щелкните на значке TMemo, а затем - на форме, буксировкой и перетаскиванием маркеров придайте ему такие размеры и положение, чтобы осталось сверху место для размещения других компонентов.

    2. Разместите на форме значок MainMenu1 (панель инструментов Standard). Щелкните на значке MainMenu, а затем на свободном месте формы. Этот компонент будет использован для создания на форме строки меню с подменю.

    3. Аналогично, используя панель инструментов Dialogs, разместите на форме значки OpenDialog1 – окна диалога выбора открываемого файла, SaveDialog1 - окна диалога выбора файла для сохранения редактируемого текста.

В результате макет формы должен принять вид как

на рис 1, но без строки меню.


    1. Выполните программу, убедитесь в том, что невизуальные компоненты – значки меню и диалогов не отображаются на форме, а в остальном вид формы полностью соответствует её макету.

    1. Резюме

  • Создание макета формы начинается с размещения на ней компонентов, позволяющих реализовать некоторые функции разрабатываемой программы. Компоненты представлены значками в Палитре компонентов, сгруппированными на вкладках по специфике применения. Для размещения компонента на макете формы следует щелкнуть его значок на вкладке Палитры компонентов, а затем щелкнуть на макете формы.

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

  • Некоторые компоненты не отображаются на форме во время работы программы и их размещение на макете формы определяется лишь удобством разработки программы. В рассматриваемом примере такими компонентами являются все, кроме Memo1.

  • Визуальными компонентами называют те, которые имеют окна, то есть могут быть видимыми при работе программы. Например, компоненты Memo, Label, Edit.

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


  1. Создание структуры меню.


    1. Двойным щелчком на значке MainMenu1 откройте Конструктор меню (см. рис. 2), дайте первому пункту строки меню название Файл, а первому пункту его подменю название Создать.

Справка. Чтобы добавить пункт меню/подменю, следует щелчком выделить свободную рамку в Конструкторе меню, набрать текст названия пункта меню в строке Caption окна Object Inspector (Инспектора объектов) на вкладке Properties(свойства) (см. рис. 4) и нажать клавишу Enter. Если это название набрано русскими буквами, то именем пункта меню, используемым в программе, будет имя вида N<число>. Например, для первого пункта меню - N1, для второго - N2, и так далее.

    1. Аналогично создайте пункт меню Работа с двумя подпунктами с временными именами А и Б (в дальнейшем эти имена должны быть заменены на имена пунктов вашего варианта задания (см. ниж).

В окне Structure (Дерево объектов) отображаются форма и расположенные на ней компоненты, обра-

зующие иерархическую структуру. Для выполняемого задания её вид представлен на рис. 3.

    1. Резюме

  • При добавлении на форму компонентов и пунктов подменю происходит добавление в объявление типа формы TForm1 одноименных полей соответствующих типов. Полный их перечень, включая и имя формы, представлен в раскрывающемся списке Инспектора объектов (см. рис. 4 и рис. 5). Выбор в этом списке строчки приводит к отображению на вкладках Инспектора объектов сведений о значениях свойств соответствующего объекта (на вкладке Properties) и методов обработки связанных с этим объектом событий (на вкладке Events).

  • После размещения компонентов на форме буксировкой можно придать форме и компонентам необходимые положение и размеры, изменяя таким образом значения их свойств, которые будут сохранены и при старте программы, если не изменены программно. Значения свойств формы и компонентов на стадии проектирования программы можно изменять и непосредственно на вкладке Properties окна Инспектора объектов.

  1. Создание заглушек обработчиков событий.

        1. О

          procedure TForm1.N2Click(Sender: TObject);

          begin

          //Обработчик щелчка на пункте меню ФАЙЛ.СОЗДАТЬ

          end;

          Рис. 6

          бработчик события – это метод, автоматически вызываемый при наступлении события, связанного с формой или компонентом и имеющий в программе определенную функцию, то есть выполняющий определённую работу в соответствующей ситуации. Например, обработчик щелчка на пункте меню Файл/Открыть… должен, в частности, обеспечить диалог по выбору файла и загрузку его текста в поле многострочного редактора (TMemo).

        2. Ш

          type

          TForm1 = class(TForm)

          Memo1: TMemo;

          MainMenu1: TMainMenu;

          OpenDialog1: TOpenDialog;

          SaveDialog1: TSaveDialog;

          N1: TMenuItem;

          N2: TMenuItem;

          N3: TMenuItem;

          N4: TMenuItem;

          N5: TMenuItem;

          N6: TMenuItem;

          N7: TMenuItem;

          N8: TMenuItem;

          N9: TMenuItem;

          N10: TMenuItem;

          procedure N2Click(Sender: TObject);

          procedure N3Click(Sender: TObject);

          procedure N4Click(Sender: TObject);

          procedure N5Click(Sender: TObject);

          procedure N6Click(Sender: TObject);

          procedure N7Click(Sender: TObject);

          procedure N9Click(Sender: TObject);

          procedure N10Click(Sender: TObject);

          procedure FormCreate(Sender: TObject);

          private

          { Private declarations }

          public

          { Public declarations }

          end;

          Рис. 7. Объявление типа формы после добавленияуправляющих элементов и создания заглушек методов

          аблоном обработчика события будем называть конструкцию, состоящую только из заголовка метода и операторных скобок. Шаблон создётся автоматически, например, при двойном щелчке в поле, соответствующем событию формы или компонента, на вкладке События Инспектора объектов. Одновременно в объявление класса TForm1 добавляется заголовок метода.

        3. Заглушкой обработчика события будем называть его шаблон, дополненный комментариями и\или объявлениями и операторами, но не выполняющий полностью требуемых функций обработчика события.

    1. Для пункта меню Создать двойным щелчком в строке OnClick на вкладке Events в окне Инспектора объектов (см. рис. 5) или двойным щелчком на строке Создать {N2} в дереве объектов создайте шаблон обработчика события – щелчка на пункте меню Создать во время исполнения программы, и превратите его в заглушку, добавив комментарий, как показано на рис. 6.

        1. Справка. Если не добавить что-либо в шаблон обработчика события, то он и соответствующий заголовок метода в объявлении класса TForm1 будут удалены из текста программы при её подготовке к выполнению.

    1. Аналогично, снабдив соответствующими комментариями, создайте заглушки обработчиков событий – щелчков на всех пунктах подменю строки меню.

    2. Аналогично, снабдив соответствующим комментарием, создайте заглушку обработчика события – создания формы, шаблон которого можно получить так: щелкнуть на свободном месте макета формы и в Инспекторе объектов на вкладке Events сделать двойной щелчок в строке OnCreate.

После добавления на форму управляющих элементов и заглушек обработчиков событий объявление класса формы TForm1 примет вид, показанный на рис. 7.

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

  1. Добавление переменных, представляющих текущее состояние процесса обработки данных.

Справка. Эти переменные используются разными методами и их объявление можно дать либо внутри объявления класса, либо в разделе var в интерфейсной части, либо в разделе var в части реализации. Если в дальнейшем предполагается запретить доступ к этим переменным вне данного модуля (например, в наследниках класса, объявляемых в других модулях или в основной программе), то их следует объявить в части реализации или в разделе private класса. TForm1.

Справка. Чтобы не появлялось окно консоли введите команду Project/Options/Linker и сбросьте флажок Generate Console Application.

    1. Добавьте в раздел реализации объявление переменной S:string. Она должна представлять спецификацию (имя) файла, обрабатываемого в текущий момент. Её пустое значение будет обозначать, что текст из элемента Memo1 еще не сохранен в файле.

  1. Создание обработчиков событий.

    1. Добавьте в метод procedure TForm1.FormCreate(Sender: TObject) обработки события FormCreate операторы и комментарии, как на рис.8.

    2. Создайте обработчик procedure TForm1.N6Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить как…, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, как на рис. 9.

Для проверки работы. Запустите программу, наберите в поле Memo1 строки Иванов…. 5 5 5 и Медоватов. 4 4 5 (фамилии дополнены точками до 10 символов) и сохраните этот текст в текущей папке в файле F1.txt. Затем откройте этот файл на новой вкладке с именем F1.txt окна редактора текстов Delphi следующим образом: введите команду Файл/Открыть…, в появившемся окне диалога Open выберите в раскрывающемся списке Тип файлов: строку Any file(*.*), в списке файлов выберите F1 и щелкните на кнопке Открыть. В дальнейшем, если будет выполняться сохранение в файле, в среде Delphi будет появляться сообщение, предлагающее обновить текст на вкладке F1.txt.

    1. Создайте самостоятельно обработчик procedure TForm1.N5Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить, используя условный оператор. Если текст ещё не сохранялся в файле (S=''), то следует вызвать N6Click(Self) - обработчик, созданный для пункта меню Файл.Сохранить как… в предыдущем пункте задания, иначе – просто выполнив оператор Memo1.Lines.SaveToFile(S) – сохранение всего редактируемого текста в файле с именем, хранящемся в S. Считать, что текст не модифицировался.

    2. procedure TForm1.N3Click(Sender: TObject);

      begin

      //Обработчик щелчка на пункте меню ФАЙЛ.ОТКРЫТЬ...

      if Memo1.Modified then begin //если текст Memo1 был

      // изменён, то предложить диалог для выбора файла

      case MessageDlg('Текст был изменен. Сохранить данные'+

      ' в файле по выбору?', mtConfirmation,

      [mbYes, mbNo, mbCancel], 0) of

      6{idYes}: begin // сохранить текст в файле, выбрав его

      //в диалоге ФАЙЛ.СОХРАНИТЬ КАК...

      N6Click(Self);

      //перейти к диалогу ФАЙЛ.ОТКРЫТЬ

      end;

      {2}idCancel: exit;//выйти из диалога ФАЙЛ.ОТКРЫТЬ

      //в редактор без сохранения

      {7}idNo:;//не сохранять текст в файле и

      //перейти к диалогу ФАЙЛ. ОТКРЫТЬ

      end; //case

      end;//if Memo1.Modified

      //Открытие окна диалога ФАЙЛ.ОТКРЫТЬ для выбора папки

      //и файла, текст из которого следует

      //поместить в Memo1 - рабочую область редактора.

      if Form1.OpenDialog1.Execute then begin //если выбран файл

      S:=OpenDialog1.FileName;//то S присвоить спецификацию файла,

      Memo1.Lines.LoadFromFile(S);//загрузить текст из файла в Memo1

      Memo1.Modified:=false;//считать, что текст не модифицирован,

      //а в заголовок формы добавить спецификацию файла

      Form1.Caption:='Form1' + ' ' + S;

      end;//if Form1.OpenDialog1.Execute

      end;

      Рис. 10. Обработчик события открытия файла

      Создайте обработчик procedure TForm1.N3Click(Sender: TObject) события щелчка на пункте меню Файл\Открыть…, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду следующее.

      1. Если редактируемый текст не был изменён (Memo1. Modified ложно), то сразу перейти к диалогу открытия файла, иначе следует предложить пользователю разрабатываемой программы выбрать в диалоге (см. справку по функции MessageDlg) вариант продолжения работы с измененным текстом:

    • I) или сохранить его в файле по выбору, вызвав N6Click(Self) и затем открыть новый файл;

    • II) или не сохранять текст и открыть новый файл;

    • III) или отменить выполнение команды, выйдя из метода по exit и продолжить редактирование текста, как если бы команда открытия файла вообще не вводилась.

(см. текст обработчика рис. 10).

      1. Диалог для выбора открываемого файла запускается командой OpenDialog1.Execute (см справку по классу TOpenDialog). Если открываемый файл не был выбран (в окне диалога Открыть была нажата кнопка Отмена), то следует просто выйти из обработчика (вернуться к редактированию прежнего текста), иначе следует загрузить выбранный файл на редактирование, переменной S присвоить спецификацию этого файла и отобразить её в заголовке окна форма, а также свойству Memo1.Modified присвоить значение false – признак того, что загруженный на редактирование текст не изменён.

    1. Создайте самостоятельно обработчик procedure TForm1.N7Click(Sender: TObject) события щелчка на пункте меню Файл.Выход, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду следующее. Если редактируемый текст не был изменён (Memo1.Modified ложно), то сразу завершите работу программы оператором close, иначе следует предложить пользователю разрабатываемой программы выбрать в диалоге (см. справку по функции MessageDlg) вариант продолжения работы с измененным текстом:

    • I) или сохранить его в файле (пользователь нажал кнопку Yes) по выбору, вызвав N6Click(Self) и затем завершить работу программы;

    • II) или не сохранять текст (пользователь нажал кнопку No) и завершить работу программы;

    • III) или отменить выполнение команды (пользователь нажал кнопку Cancel), выйдя из метода по exit и продолжить редактирование текста, как если бы команда завершить работу программы вообще не вводилась.

При выполнении этого пункта задания используя вкладки Index или Search справочной системы Turbo Delpi сначала следует найти справку по функции MessageDlg, затем – допустимые значения её параметров из числа стандартных. Например, вызов функции

MessageDLG('Сохранить файл?',mtInformation,[mbCancel,mbYes,mbNo],0)

обеспечит диалог вида


Справка по работе со справочной системой Turbo Delpi.

    • Запуск справочной системы командой Help/Borland Help.

    • Установка фильтра для отбора справок только по языку Delphi – выбором в раскрывающемся списке Filtered by: строки Language: Delphi.

    • Выбор справки по оглавлению справочной системы (по интересующей теме, подтеме и т.д) выполняют на вкладке Contents (если её нет, то введите команду Viev/Navigation/Contents…).

    • Выбор справки по ключевому слову (по стандартному имени типа, имени подпрограммы и т.п) выполняют на вкладке Index.

    • Выбор разделов справки по содержащемуся в них фразе, слову или части слова – из списка Search Result for…, формирующегося при вводе искомого текста в поле Look for: и нажатия кнопки Search.

    1. Создайте самостоятельно обработчик procedure TForm1.N2Click(Sender: TObject) события щелчка на пункте меню Файл.Создать, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии. Окно Memo1 нужно очистить без всяких условий, задав Memo1.Text значение пустой строки, имя файла S должно иметь значение пустой строки,( то есть не должна представлять имя файла,), а оператором присваивания в заголовке формы Form1.Caption задать название Form1.

    2. Создайте самостоятельно обработчик procedure TForm1.N5Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии.

В условном операторе записать условие, если текст еще не сохранялся в файле (S=''), то следует передать управление обработчику команды Файл/Сохранить как…, выполнив оператор N6Click(Self), иначе – сохранить текст Memo1 в файле оператором Memo1.Lines.SaveToFile(S). Затем установить оператором Memo1.Modified:=false признак, что текст в Memo1 не модифицирован.

    1. Создайте самостоятельно обработчик procedure TForm1.N4Click(Sender: TObject) события щелчка на пункте меню Файл.Закрыть, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду, что если текст был изменен, то нужно в диалоге (см. справку по функции MessageDlg) выяснить, что желает пользователь. Если он нажмёт кнопку Cancel, то есть хочет вернуться к редактированию текста, то следует просто выйти из обработчика. Если он нажмёт кнопку No, то нужно удалить текст, вывести в заголовок окна название формы ‘Form1’ и присвоить S пустое значение. Если пользователь нажмёт кнопку Yes, то нужно выполнить те же действия, что и при нажатии кнопки No, но предварительно сохранить текст оператором Memo1.Lines.SaveToFile(S), если S'', или сохранить текст в файле по выбору, вызвав N6Click(Self), если S=''.

  1. Задания на обработку TextFile

        1. Общее для всех заданий

  1. Подпункты меню Файл: Файл.Открыть…, Файл.Сохранить как…, Файл\Выход… и соответствующие им диалоги, а также пункт меню Работа, но с двумя индивидуальными для каждого задания подпунктами.

  2. Исходный (создаваемый с использованием меню Файл) файл должен иметь следующую структуру строк (в скобках указаны длины полей и выравнивание): Номер строки (4, правое), пробелы (2), Группа (8, левое), пробелы (2), Фамилия (12, левое), Оценка 1 (3, правое), Оценка 2 (3, правое), Оценка 3 (3, правое),
    например,

  3. Исходный файл должен храниться в каталоге проекта программы и иметь данные по трём группам, для каждой из которых должно быть число строк, достаточное для проверки работ по подпунктам меню Работа, но не менее 10 для каждой группы. Сделать Memo1 шириной >= длине строки файла и с вертикальной полосой прокрутки (в Инспекторе объектов свойству ScrollBars дать значение ssVertical при создании макета формы).

  4. Если в задании какие-либо данные отсутствуют или сказано, что они должны быть введены/выбраны в диалогах, то предполагается использование OpenDialog, SaveDialog, MessageDlg или InputQuery

В некоторых заданиях будет предложено отбирать строки файлов по маске. Маской является строка, содержащая символы замещения: * (звёздочка) – представляет любую, в том числе и пустую, последовательность символов; ? (знак вопроса) – представляет любой один, и только один символ. Например, маске *т? удовлетворяет любая последовательность символов, предпоследним символом которой является буква «т», после которого должен стоять ровно один любой символ. Такой маске будут, в частности, соответствовать слова та, эта, приметы, но не такт, этак, приметный.


Добавляемые подпункты меню Работа по вариантам
1. - Отличники…
– для выбранного файла отобразить список фамилий студентов заданной в диалоге группы, имеющих все оценки 5.

- Средние баллы – для выбранного файла отобразить средние баллы по каждому экзамену для студентов всех групп.

2. - Средний балл группы… – для выбранного файла отобразить для заданной в диалоге группы средний балл по всем экзаменам.

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

3. - Неуды по экзаменам… – для выбранных в диалоге файла, группы и экзамена (1, 2 или 3) отобразить количество оценок 2.

- Хорошисты – отобразить строки файла, представляющие студентов всех групп, имеющих оценки, большие 3.

4. - Разбить по группам – по данным файла, содержащим сведения по студентам разных групп, создать новые текстовые файлы с именами '<имя группы>.txt', включающими все строки файла-источника с соответствующими именами групп. Массивы не использовать.

- Отстающие – отобразить строки файла, представляющие студентов всех групп, имеющих две и более оценки 2.

5. - Список групп… – по данным файла, содержащим сведения по студентам разных групп, создать новый текстовые файл с именами групп и отобразить его содержимое в окне редактора текста.

- Выбор по фамилии… – загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, заданную пользователем в диалоге.

6. - Объединение групп… – по данным из двух файлов текущего каталога, заданным пользователем в диалоге, создать третий текстовый файл с именем, являющимся склейкой через пробел имен файлов-источников.

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

7. - Добавление строки… – в упорядоченный по фамилиям файл, заданный пользователем в диалоге, добавить новую строку, заданную в окне редактора текста, сохранив упорядоченность по фамилиям.

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

8. - Сортировка… – упорядочить строки файла в редакторе текста по фамилиям методом пузырька и сохранить в том же файле.

- Выбор по маске… – загрузить в око редактора строки файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с одним символом замещения * (звёздочка), заданной пользователем в диалоге.

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

- Выбор N лучших… –загрузить в око редактора N строк файла, представляющие студентов всех групп, имеющих наибольшие суммы баллов.

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

- Выбор трёх худших… – загрузить в око редактора три строки файла, представляющие студентов заданной пользователем в диалоге группы, имеющих наименьшие суммы баллов.

11. - Сортировка… –строки файла загрузить на редактирование, упорядочить по фамилиям методом поиска минимального элемента и сохранить в том же файле.

- Выбор по маске… – загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, не соответствующую маске с одним символом замещения * (звёздочка), заданной пользователем в диалоге.

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

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

13. - Сортировка при выводе… – загрузить в окно редактора текст файла, очистить файл и затем выводить из редактора строки в файл так, чтобы сохранялась упорядоченность строк по убыванию сумм баллов.

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

14. - Обратить порядок… – загрузить в окно редактора текст файла, очистить файл и затем выводить из редактора строки в файл в обратном порядке.

- Выбор по маске… – загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с любым числом символов замещения * (звёздочка), заданной пользователем в диалоге.

15. - Сортировка по группам – загрузить в таблицу редактора данные записей файла, очистить файл и затем выводить из редактора данные в файл так, чтобы соблюдалась упорядоченность по группам.

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

16. - Средние баллы по группам… – для файла вычислить средний балл для каждой группы и отобразить в строках редактора имена групп и соответствующие средние баллы.

- Удалить строку… – удалить из файла строку с заданной фамилией и группой, используя диалоги для ввода необходимых данных.

17. - Число отличников по группам… – для файла вычислить для каждой группы количество отличников и отобразить в строках редактора.

- Добавить строку… – добавить в конец файла строку с заданной фамилией, группой и оценками, используя диалоги для ввода необходимых данных, но не окно редактора.

18. - Упорядочить по оценке… – для файла упорядочить, используя окно редактора текста, строки по убыванию заданной (1, 2 или 3) в диалоге оценки.

- Заменить строку… – в диалоге ввести строку и заменить ею строку файла с такой же фамилией и группой при загрузке в редактор строк из файла; результат сохранить в том же файле.

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

- Изменить строку… – изменить в файле строку с заданным номером, используя диалог InputQuery или InputBox для ввода необходимых данных и редактирования строки, но не окно редактора.

20. - Удалить группу в новый файл – переместить из файла данные заданной группы в другой файл.

- Добавить в файл – скопировать записи одного файла в конец другого файла.

21. - Скопировать часть файла –скопировать в новый файл строки файла с четными номерами.

- Отобразить часть файла – отобразить в окне редактора данные первых трёх записей нового файла (см. предыдущий пункт задания).

22. - Копирование с инверсией – записи одного файла скопировать в другой, расположив их в обратном порядке.

- Три последних записи – отобразить в окне редактора данные трёх последних записей файла, выбранного в диалоге.

23. - Добавить средние баллы – отобразить в окне редактора данные файла, добавив в конце каждой строки (в новой колонке) значения средних баллов.

- Упорядочить по СредБаллу – упорядочить в окне редактора строки по убыванию среднего балла и вывести данные (без средних баллов) в тот же файл, не меняя тип файловой переменной.

24. - Добавить СредБаллы групп – по данным файла-источника создать текстовый файл ‘SbGr.txt’, поместив в него данные, включающие имя группы и средний балл в группе по всем экзаменам.

- Упорядочить группы по СредБаллу –упорядочить записи в файле-источнике по убыванию среднего балла группы.

25. - Заменить оценки – в файле заменить заданное имя группы на другое.

- Упорядочить по оценке – в файле упорядочить записи по возрастанию заданной оценки.