With savedialog1, memo1 do if execute then

      Комментарии к записи With savedialog1, memo1 do if execute then отключены

begin Lines.SaveToFile(FileName);

OpenDialog1.FileName:=FileName; // Чтобы исправленный текст не затёр источник

end;

Наконец, для кнопки Сохранить пишем:

Memo1.Lines.SaveToFile(OpenDialog1.FileName); //Сохраняем туда, откуда считали

При работе этих фрагментов можно заметить, что выбирать приходится из всех файлов в нужной директории. Удобнее видеть только, например, текстовые файлы, или другой тип файлов по нашему выбору. Для этого используются фильтры, свойство Filter в наших компонентах. Настраивается оно в Инспекторе Объектов. При выборе его можно перейти в редактор фильтров:

Свойство Delphi диалогов Title позволяет записать в заголовок нужную нам фразу. Если оставить его пустым, то в заголовке будут стандартные открыть или сохранить.

Свойство InitialDir позволяет в момент открытия оказаться в нужной нам директории. Оно доступно как на этапе конструирования, так и программно.

Текстовый файл можно создать в среде Delphi, выбрав в меню команду File –New –Other – OtherFile –Text.

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

Типизированный файл содержит элементы одного типа. Тип элементов может быть любым, кроме файлового типа.

Для чтения данных из типизированного файла применяется процедура Read, список ввода которой, должен содержать переменные того же типа, что и элементы файла.

Для записи в типизированный файл используется процедура Write, список вывода которой должен содержать переменные того же типа, что и элементы файла.

К типизированным файлам можно с помощью процедуры procedure Seek( var f; n:longint );

организовать прямой доступ. Процедура Seek перемещает файловый указатель в файле, связанном с файловой переменной f, на элемент с номером n. Нумерация элементов файла начитается с нуля.

Для определения текущей позиции в файле используется функция function FilePos(var F):longint;

Для определения размера файла используется функция function FileSize(var F):integer;

Например, для установки файлового указателя на последний элемент файла f достаточно записать Seek(f, filesize(f)-1);

на первый элемент Seek(f, 0); вернуться на один элемент назад Seek(f, filepos(f)-1);

Процедурой Truncate (var f); можно уменьшить размер файла, удаляя все данные после текущей позиции

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

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

В процедурах reset и rewrite для нетипизированных файлов указывается дополнительный параметр RecSize, чтобы задать размер записи, используемый при передаче файла:

procedure reset (var f:file {;RecSize:word}); procedure rewrite (var f:file {;RecSize:word});

По умолчанию RecSize =128 байтам.

За исключением процедур read и write для нетипизированных файлов можно использовать все стандартные процедуры, которые допускаются использовать для типизированных файлов. Вместо процедур read и write используются процедуры

procedure blockread (var f:file; var buf; count:integer; {var at:integer}); procedure blockwrite (var f:file; var buf; count:integer; {var at:integer});

здесь f – имя файловой переменной, связанной с нетипизированным файлом, buf – переменная, в которую будут помещаться данные, count – количество записей, которое нужно прочитать или записать за одно обращение к файлу. Переменная buf должна иметь длину не меньшую, чем count*RecSize байт. Необязательный параметр at содержит количество реально прочитанных или записанных записей.

Технология работы с файлами в системе Delphi требует определённого порядка действий:

1. Прежде всего, файл должен быть открыт. Система следит, чтобы другие приложения не мешали работе с файлом. При этом определяется, в каком режиме открывается файл — для изменения или только считывания информации. После открытия файла в программу возвращается его идентификатор, который будет использоваться для указания на этот файл во всех процедурах обработки.

2. Начинается работа с файлом. Это могут быть запись, считывание, поиск и другие операции.

3. Файл закрывается. Теперь он опять доступен другим приложениям без ограничений. Закрытие файла гарантирует, что все внесённые изменения будут сохранены, так как для увеличения скорости работы изменения предварительно сохраняются в специальных буферах операционной системы.

Для решения задач потребуются готовые файлы для тестирования реализуемых алгоритмов. Программу создания текстового (типизированного) файла можно выполнить как самостоятельный проект или включить создание файла в качестве элемента решаемой задачи.

Для выбора имени файла использовать компоненты OpenDialog, SaveDialog.

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

1. Вычислить количество строк из четырех символов данного текстового файла. Выбранный файл отобразить в окне Memo.

2. Показать строки файла, начинающиеся с буквы «ф». Для отображения нужных строк использовать компонент Memo.

3. Подсчитать число строк файла, оканчивающихся на заданную букву русского алфавита. Выбранный файл отобразить в окне Memo.

4. Показать все строки файла, начинающиеся и заканчивающиеся одним и тем же символом. Для отображения нужных строк использовать компонент Memo.

5. Дополнить новыми строками уже существующий текстовый файл.

6. Найти количество строк данного текстового файла и добавить к нему строку, «Количество строк в файле» и найденное число.

7. Дан текстовый файл, содержащий целые числа. Найти количество отрицательных чисел в каждой строке файла.

8. Дан текстовый файл, содержащий строки. Найти максимальную длину строки в данном файле. Показать самую длинную строку файла. Если таких строк несколько, показать первую из них.

9. Дан текстовый файл, содержащий целые числа. Найти количество чисел в файле. 10.Дан текстовый файл, содержащий целые числа. Найти сумму четных чисел файла.

11.Дан текстовый файл, содержащий целые числа. Найти среднее арифметическое чисел файла.

12.Дан текстовый файл, содержащий строки. Выяснить, имеются ли в нем строки, начинающиеся на заданную букву. Если да, то определить номер первой из этих строк.

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

1. Переписать все элементы данного символьного файла новый символьный файл в обратном порядке.

2. Создать типизированный файл, состоящий из символов, введенных в окно ввода Edit. Заменить в файле все цифры символом ‘?’. (Не использовать вспомогательный файл.)

3. Создать типизированный файл, состоящий из символов, введенных в окно ввода Edit. Переписать содержимое файла в новый символьный файл, изменяя порядок элементов: сначала все знаки препинания, встречающиеся в файле, а потом все остальные символы.

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

5. Создать типизированный файл, состоящий из символов, введенных в окно ввода Edit. Переписать содержимое файла в новый символьный файл, изменяя порядок элементов: сначала все знаки арифметических операций, встречающиеся в файле, а затем все остальные символы.

6. Создать типизированный файл, состоящий из символов, введенных в окно ввода Edit. Заменить в файле каждый пробел на ‘_’. (Не использовать вспомогательный файл.)

7. Создать типизированный файл, состоящий из целых чисел, введенных в столбик в окно текстового редактора Memo. Вывести содержимое файла в поле метки Label.

8. Создать типизированный файл, состоящий из символов, введенных в окно ввода Edit. Заменить в файле каждую латинскую букву ‘e’ пробел на ‘i’.

9. Дан типизированный файл целых чисел. Найти сумму элементов файла и записать найденное число после последнего элемента файла.

10.Дан типизированный файл целых чисел. Переписать содержимое файла в новый типизированный файл, изменяя порядок элементов: сначала все отрицательные, а потом неотрицательные элементы файла.

11.Дан типизированный файл целых чисел. Переписать содержимое файла в новый типизированный файл целых чисел, добавив перед первым элементом количество четных чисел исходного файла, а после последнего – количество нечетных чисел исходного файла.

12.Дан типизированный файл целых чисел. Заменить каждое число файла, кроме первого, на остаток от деления данного числа на первое число файла. (Не используя вспомогательный файл.)

Приложение 1

procedure AssignFile (var F; FileName: String); Связываетфайловую переменную F с именем файла FileName.
procedure ChDir (Path:String); Изменяет текущий каталог. Path- переменная, задающая путь кустанавливаемой по умолчанию папке.
procedure CloseFile (var F); Закрывает файл, однако связь файловой переменнойс именем файла, установленная ранее процедурой AssignFile сохраняется. Функциипроцедуры CloseFile на системном уровне выполняются автоматическипо отношению ко всем открытым файлам принормальном завершениипрограммы. Если после применения процедуры CloseFileфайл нужно открыть повторно, процедуру AssignFile можно не применять, так как связьфайловой переменной с файломне разрывается.
functionDateTimeToFileDate (DateTime: TDateTime): Integer; Преобразует значение переменной DateTimeтипа TDateTime Delphi в системный форматвремени создания (обновления) файла.
functionFileDateToDateTime (FileDate: Integer): TDateTime; Преобразует системный формат времени создания (обновления) файлав формат TDateTime Delphi.
functionDiskFree (D: Byte):LongInt; Возвращает объём в байтах свободного пространства науказанном диске. Переменная D — номер диска (0 -устройство по умолчанию, текущий диск; 1- диск А; 2 -диск B;3 — диск С и т.д.). Функция возвращает значение-1, если указан номер несуществующего диска.
functionDiskSpace (D: Byte): Integer; Возвращает объём в байтах полного пространства науказанном диске. Переменная D — номер диска (0 -устройство по умолчанию, текущий диск; 1- диск А; 2 -диск B;3 — диск С и т.д.). Функция возвращает значение-1, если указан номер несуществующего диска.
functionEOF (var F:): Boolean; Тестирует конец файла ивозвращает True,если файловый указатель стоитв конце файла. При записи это означает,что очередной компонентбудет добавлен в конецфайла, при чтении -что файл исчерпан.
procedure Erase (var F); Уничтожает файл F.Перед выполнением процедуры файл должен быть закрыт процедурой CloseFile.
functionFileAge (const FileName:String): Integer; Для файла FileNameвозвращает время его последнего обновления (в системном формате) или -1, если такогофайла не существует.
functionFileExists (const FileName:String): Boolean; Возвращает True, если файл FileNameсуществует, иFalse в противном случае.

functionFileGetDate (Handle: Integer):Integer; Позаданному дескрипторуфайла Handle возвращаетвремя и дату его создания (в системном формате). Если дескрипторне существует, возвращает -1.
function FileSetDate (Handle: Integer; Age: Integer): Integer; Дляфайла с дескриптором Handle устанавливает новое время и дату его создания Age(в системном формате). Вслучае удачи возвращает 0 или код ошибки в противномслучае.
functionFindFirst (const Path: String;Attr:Integer; var F: TSearchRec): Integer; Возвращает в переменной F типаTSearchRec первый из файлов, зарегистрированных в указанном каталоге. Path: путь поиска с маской выбора файлов; Attr: атрибуты выбираемыхфайлов.
functionFindNext (var F: TSearchRec): Integer; Возвращает в переменной F следующий файл в каталоге. Переменная F должна быть предварительно инициирована обращением к функции FindFirst.
procedure FindClose (var F: TSearchRec); Освобождаетпамять, выделенную для поиска файлов функциями FindNext и FindFirst.
procedure Flush(var F); Очищает внутренний буфер файла, гарантируя темсамым сохранность всех последних изменений файлана диске.
procedure GetDir (D: Byte; var S: String); Возвращает текущий каталог(каталог по умлочанию).D — номер устройства(0: устройство поумолчанию, 1 -диск А, 2 — диск В и т.д.); S — переменная типаString, в которой возвращается путь к текущему каталогу на указанном диске.
procedure MkDir (Dir: String); Создаёт новый каталогна текущем диске. Dir — адрес нового каталога, которыйне может совпадать с именемуже существующего каталога.
procedure Rename (var F; NewName: String); Переименовывает, т.е. задаётновые адрес и имя файлаF. NewName — строковоевыражение, содержащее новыеадрес и имя файла. Перед выполнением процедурынеобходимо закрытьфайл.
procedure Reset (var F: File[; RecSize:Word]); Открывает существующий файл. Переменная RecSize имеет смысл только для нетипизированных файлов и указывает размерблока данных.
procedure Rewrite (var F: File[; RecSize:Word]); Создаёт новый файл. Переменная RecSizeимеет смысл только длянетипизированных файлов и указывает размер блока данных.
procedure RmDir (Dir: String); Удаляет каталог Dir. Удаляемый каталогдолжен быть пустым, т.е. не содержать файловили вложенных каталогов.
functionCopyFile (OldName, NewName: AnsiChar; FileExists:Boolean): Boolean; Копирует файл. Эта функция -не встроенная функцияDelphi, а одна из API функций ОС Windows.Возможность работать с нимипрограмма получает

после добавления всекцию uses модуля Windows. Параметры функции: OldName- старые адрес и имя файла; NewName- новые адрес и имя файла; FileExists -переменная, определяющая реакцию на существование файла по новому адресу. ПриFileExists=False файл будет перезаписан. ПриFileExists=True функция завершится ошибкой.
functionGetLogicalDrives: Cardinal; Эта функция — также из составаWinAPI функций. Как и следует из её названия, позволяетполучить структуру логическихдисков компьютера.

Статьи к прочтению:

Delphi — SaveDialog execute + memo save txt


Похожие статьи:

  • With opendialog1, memo1 do

    СРЕДА ПРОГРАММИРОВАНИЯ Turbo DELPHI Лабораторная работа №5 Тема: «Файлы» Ассистент Кунина М.В. Волгоград 2014 Файл — это именованная область данных на…

  • Memo1.clear; // очистка окна редактора memo1

    Синицын А. К., Навроцкий А. А. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ В СРЕДЕ DELPHI. БАЗОВЫЕ ТИПЫ И ПРОСТЕЙШИЕ АЛГОРИТМЫ Лабораторный практикум по…