Текстовый редактор и задания (981802), страница 2
Текст из файла (страница 2)
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) события щелчка на пункте меню Файл\Открыть…, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду следующее.-
Если редактируемый текст не был изменён (Memo1. Modified ложно), то сразу перейти к диалогу открытия файла, иначе следует предложить пользователю разрабатываемой программы выбрать в диалоге (см. справку по функции MessageDlg) вариант продолжения работы с измененным текстом:
-
I) или сохранить его в файле по выбору, вызвав N6Click(Self) и затем открыть новый файл;
-
II) или не сохранять текст и открыть новый файл;
-
III) или отменить выполнение команды, выйдя из метода по exit и продолжить редактирование текста, как если бы команда открытия файла вообще не вводилась.
(см. текст обработчика рис. 10).
-
Диалог для выбора открываемого файла запускается командой OpenDialog1.Execute (см справку по классу TOpenDialog). Если открываемый файл не был выбран (в окне диалога Открыть была нажата кнопка Отмена), то следует просто выйти из обработчика (вернуться к редактированию прежнего текста), иначе следует загрузить выбранный файл на редактирование, переменной S присвоить спецификацию этого файла и отобразить её в заголовке окна форма, а также свойству Memo1.Modified присвоить значение false – признак того, что загруженный на редактирование текст не изменён.
-
Создайте самостоятельно обработчик 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.
-
Создайте самостоятельно обработчик procedure TForm1.N2Click(Sender: TObject) события щелчка на пункте меню Файл.Создать, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии. Окно Memo1 нужно очистить без всяких условий, задав Memo1.Text значение пустой строки, имя файла S должно иметь значение пустой строки,( то есть не должна представлять имя файла,), а оператором присваивания в заголовке формы Form1.Caption задать название Form1.
-
Создайте самостоятельно обработчик procedure TForm1.N5Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии.
В условном операторе записать условие, если текст еще не сохранялся в файле (S=''), то следует передать управление обработчику команды Файл/Сохранить как…, выполнив оператор N6Click(Self), иначе – сохранить текст Memo1 в файле оператором Memo1.Lines.SaveToFile(S). Затем установить оператором Memo1.Modified:=false признак, что текст в Memo1 не модифицирован.
-
Создайте самостоятельно обработчик procedure TForm1.N4Click(Sender: TObject) события щелчка на пункте меню Файл.Закрыть, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду, что если текст был изменен, то нужно в диалоге (см. справку по функции MessageDlg) выяснить, что желает пользователь. Если он нажмёт кнопку Cancel, то есть хочет вернуться к редактированию текста, то следует просто выйти из обработчика. Если он нажмёт кнопку No, то нужно удалить текст, вывести в заголовок окна название формы ‘Form1’ и присвоить S пустое значение. Если пользователь нажмёт кнопку Yes, то нужно выполнить те же действия, что и при нажатии кнопки No, но предварительно сохранить текст оператором Memo1.Lines.SaveToFile(S), если S≠'', или сохранить текст в файле по выбору, вызвав N6Click(Self), если S=''.
Задания на обработку TextFile
Общее для всех заданий
-
Подпункты меню Файл: Файл.Открыть…, Файл.Сохранить как…, Файл\Выход… и соответствующие им диалоги, а также пункт меню Работа, но с двумя индивидуальными для каждого задания подпунктами.
-
Исходный (создаваемый с использованием меню Файл) файл должен иметь следующую структуру строк (в скобках указаны длины полей и выравнивание): Номер строки (4, правое), пробелы (2), Группа (8, левое), пробелы (2), Фамилия (12, левое), Оценка 1 (3, правое), Оценка 2 (3, правое), Оценка 3 (3, правое),
например, -
Исходный файл должен храниться в каталоге проекта программы и иметь данные по трём группам, для каждой из которых должно быть число строк, достаточное для проверки работ по подпунктам меню Работа, но не менее 10 для каждой группы. Сделать Memo1 шириной >= длине строки файла и с вертикальной полосой прокрутки (в Инспекторе объектов свойству ScrollBars дать значение ssVertical при создании макета формы).
-
Если в задании какие-либо данные отсутствуют или сказано, что они должны быть введены/выбраны в диалогах, то предполагается использование 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. - Сортировка при чтении… – при чтении строк файла добавлять их в окно редактора текста так, чтобы сохранялась упорядоченность строк по убыванию среднего балла, а затем сохранить упорядоченный таким образом текст в том же файле.
- Выбор трёх худших… – загрузить в око редактора три строки файла, представляющие студентов заданной пользователем в диалоге группы, имеющих наименьшие суммы баллов.