Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net: 2015-12-26

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 21.5.2024

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

  Для "лирического" вступления нужно упомянуть компоненты Delphi, которые умеют работать с файлами. Они читают и сохраняют своё содержимое, строки типа String, в файл текстового формата. Это компоненты ListBox, ComboBox и Memo, расположенные на первой же вкладке палитры компонентов.

  Каждая строка компонентов ListBox и ComboBox является объектом Items[i], а Memo - Lines[i], где i - номер строки, который отсчитывается от нуля. Добавление строк в компоненты выполняется методами Add и Insert:

 begin

  Memo1.Lines.Add('Первая строка');

  ComboBox1.Items.Add('Первая строка');

  ComboBox1.Items.Add('Вторая строка');

  ListBox1.Items.Add('Первая строка');

  ListBox1.Items.Add('Вторая строка');

 end ;

Метод Add добавляет новую строку в конец. Метод Insert имеет дополнительный параметр, указывающий, после какой строки разместить новую строку. Доступ к строкам осуществляется так:

  ComboBox1.Items[0] := 'Первая строка изменилась' ;

  ListBox1.Items[1] := 'Вторая строка изменилась' ;

У компонента ComboBox дополнительно есть свойство Text, где (как и у компонента Edit) находится вводимый текст:

  ComboBox1.Text := ' Вводимый текст ';

На выделенную в данный момент строку компонента ComboBox указывает свойство ItemIndex типа Integer, то есть это номер выделенной строки. Следовательно, получить саму выделенную строку компонента ComboBox можно следующей конструкцией:

  S:=ComboBox1.Items[ComboBox1.ItemIndex];

или, пользуясь оператором присоединения

  With ComboBox1 do

   S:=Items[ItemIndex];

Вот как по нажатию клавиши Enter можно заносить в этот компонент вводимую в строку информацию и удалять нажатием Escape:

Выделите на Форме ComboBox и перейдите в Инспектор объектов, на вкладку Events. Щёлкните дважды по обработчику OnKeyPress. Система Delphi создаст заготовку обработчика. Напишите:

 begin

  if Key=#13 then

     ComboBox1.Items.Add(ComboBox1.Text);

  if Key=#27 then

     ComboBox1.Items.Delete(ComboBox1.Items.Count-1);

 end ;

Key - определённая в этом обработчике переменная, содержащая код нажатой клавиши, #13 и #27 - коды клавиш Enter и Escape соответственно. Items.Count - количество содержащихся в компоненте строк. Так как отсчёт строк идёт от нуля, мы отнимаем единицу. После очередного удаления количество строк меняется, таким образом, Items.Count-1 всегда указывает на последнюю строку. Последовательно нажимая Escape, мы можем удалить все строки. Командой

  ComboBox1.Items.Delete(0);

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

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

  ListBox1.Items.SaveToFile(' Имя_файла.txt ') ;

Впрочем, расширение можно поставить любое по желанию, не обязательно .txt, как и вообще без него обойтись. Но расширение .txt позволит легко открыть файл стандартным виндовским Блокнотом, что бывает очень удобно на этапе написания программы!

Для загрузки служит метод LoadFromFile:

  ListBox1.Items.LoadFromFile(' Имя_файла.txt ') ;

Что делать, если в своей программе мы не работаем с компонентами Combobox, ListBox или Memo, а сохранять информацию нужно? Берём один из компонентов и делаем его невидимым, для этого в Инспекторе Объектов ставим в свойство Visible значение False. Функциональность его от этого не изменится!

Последний штрих - создадим программу, сохраняющую своё положение на экране в момент закрытия и там же открывающуюся. Нам нужно сохранить два параметра - значения свойств Формы Left и Top, это расстояние от левого и верхнего краёв экрана соответственно. Значения эти выражаются в пикселах и имеют тип Integer. Необходимо перевести эти числа в строку (тип String) с помощью оператора IntToStr. Итак, разместите на Форме невидимый ListBox, щёлкните по пустому месту Формы, чтобы её свйства появились в Инспекторе объектов, и перейдите на вкладку Events. Щёлкните по обработчику OnClose и в созданной заготовке напишите:

 begin

  ListBox1.Items.Clear;

  ListBox1.Items.Add(IntToStr(Form1.Left));

  ListBox1.Items.Add(IntToStr(Form1.Top));

  ListBox1.Items.SaveToFile('MyFormPos.txt');

 end ;

Этот обработчик сохраняет положение Формы на экране. Теперь напишем обработчик, помещающий Форму на прежнее место при старте программы. Создайте заготовку обработчика события OnCreate. Это событие происходит в момент "создания" Формы операционной системой. В этот момент и нужно присваивать ей необходимые свойства. Пишите:

 begin

  if FileExists('MyFormPos.txt') then

   begin

    ListBox1.Items.LoadFromFile('MyFormPos.txt');

    Form1.Left:=StrToInt(ListBox1.Items[0]);

    Form1.Top:=StrToInt(ListBox1.Items[1]);

   end ;

 end ;

  В первой строке происходит проверка на существование файла, ведь если его не будет, произойдёт ошибка. Впрочем, программа после выдачи предупреждения откроется в том месте, где была на этапе проектирования, а при закрытии нужный файл будет воссоздан!

  Затем в логических скобках begin / end содержится сам код, который будет выполнен только приналичии файла MyFormPos.txt в папке с программой, так как используется относительный путь. Можно указать конкретное местоположение, например, C:\Program Files\MyProg\MyFormPos.txt.

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

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

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

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

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

В Delphi реализовано несколько способов работы с файлами. Познакомимся со классическим способом, связанным с использованием файловых переменных. Файловая переменная вводится для указания на файл. Делается это с помощью ключевого слова File :

  var F:  File ;

Описанная таким образом файловая переменная считается нетипизированной, и позволяет работать с файлами с неизвестной структурой. Данные считываются и записываются побайтно блоками, размер которых указывается при открытии файла, вплоть от 1 байт.

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

  var F:  File of тип_записи ;

В качестве типа могут использоваться базовае типы, или создаваться свои. Важно только, чтобы для типа был точно известен фиксированный размер в байтах, поэтому, например, тип String в чистом виде применяться не может, а только в виде String[N], как указывалось в уроке Delphi 5.

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

  Для текстовых файлов отдельно укажу, что тип файловой переменной в этом случае TextFile, а тип обычной - String.

  Для открытия файла нужно указать, где он расположен. Для этого файловая переменная должна быть ассоциирована с нужным файлом, который определяется его адресом. Адрес файла может быть абсолютным, с указанием диска и каталогов ('C:\Мои документы\Мои рисунки\FileName.ini'), или относительным, тогда он создаётся в папке с .exe файлом программы. Для задания относительного адреса достаточно указать имя файла с нужным расширением. Делается это оператором AssignFile :

  AssignFile(SaveF, 'C:\Мои документы\Мои рисунки\FileName.ini');

  AssignFile(SaveF, 'FileName.ini');

Теперь файл должен быть открыт.

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

  Открытие файла оператором Reset откроет существующий файл к считыванию или записи данных, и его указатель будет установлен на начало файла :

  Rewrite(SaveF);

  Reset(SaveF);

Каждый из этих операторов может иметь второй необязательный параметр, имеющий смысл для нетипизированных файлов, и указывающий длину записи нетипизированного файла в байтах:

  Rewrite(SaveF, 1);

  Reset(SaveF, 1);

Чтение файла производится оператором Read :

  Read(SaveF, SaveV);

Запись в файл производится оператором Write :

  Write(SaveF, SaveV);

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

  if FileExists('FileName.ini')

     then Read(SaveF, SaveV);

Принудительно установить указатель на нужную запись можно оператором Seek(SaveF, N), где N - номер нужной записи, который, как и почти всё в программировании, отсчитывается от нуля:

  Seek(SaveF, 49); - установка указателя на 50-ю запись.

При последовательном чтении из файла рано или поздно будет достигнут конец файла, и при дальнейшем чтении произойдёт ошибка. Проверить, не достигнут ли конец файла, можно оператором EOF (аббревиатура End Of File), который равен true, если прочитана последняя запись и указатель находится в конце файла:

  while (not EOF(SaveF)) do

     Read(SaveF, SaveV);

  Для текстовых файлов вместо Read и Write используются операторы Readln и Writeln, умеющие определять конец строки. В коментариях приведена процедура чтения текстового файла.

Оператор Truncate(SaveF) позволяет отсечь (стереть или, если хотите, удалить!) все записи файла, начиная от текущей позиции указателя, и до конца файла.

В конце работы с файлом его необходимо закрыть. Это делается оператором CloseFile(SaveF) ;

  Теперь можно изменить программу из первой части урока, запоминающую своё положение на экране. Описание переменных опускаю, оно приведено на рисунке выше.

 Создаём обработчик события Формы OnCreate со следующим содержимым:

procedure TForm1.FormCreate(Sender: TObject) ;

begin

  AssignFile(SaveF, 'Init.ini') ;

  if FileExists('Init.ini') then

     begin

        Reset(SaveF) ;

        Read(SaveF, SaveV) ;

        Form1.Left := SaveV.X ;

        Form1.Top := SaveV.Y ;

        Form1.Caption:=SaveV.Caption ;      //Наши переменные дополнительно сохраняют заголовок Формы!

     end ;

end ;

Теперь необходимо создать обработчик события OnClose :

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction) ;

begin

  Rewrite(SaveF) ;      //Нет необходимости проверять наличие файла, создадим его заново!

  SaveV.X := Form1.Left ;

  SaveV.Y := Form1.Top ;

  SaveV.Caption := Form1.Caption ;

  Write(SaveF, SaveV) ;

  CloseFile(SaveF) ;

end ;

В данном случае файл считывается и записывается туда, куда мы ему указали.

То, что мы узнали в предыдущей части урока, позволяет работать с файлами по адресу, жёстко записанному в тексте программы. Мы же хотим иметь возможность открывать любые файлы и работать с файлами по нашему выбору. Естественно, Delphi предоставляет нам такую возможность. Рассмотрим компоненты, позволяющие в работающей программе осуществлять выбор файлов. Delphi диалоги выбора файла позволяют указать програме, с каким файлом мы хотим работать.

  На вкладке палитры компонентов Dialogs находятся компонент Delphi OpenDialog и компонент Delphi SaveDialog. Все Delphi диалоги, находящиеся на этой вкладке, в том числе и Delphi диалоги выбора файла, невизуальные, т.е. при переносе их на Форму в работающей программе их не видно, они видны только на этапе конструирования. Компонент Delphi OpenDialog позволяет открыть в нашей программе стандартное Windows-окно диалога открытия файла, компонент Delphi SaveDialog - окно диалога сохранения.

  Delphi диалоги выбора файла сами по себе ничего не делают, а только предоставляют настройки, сделанные пользователем при выборе файла. Самый важный метод Delphi диалогов - Execute. Он срабатывает в момент нажатия кнопки "открыть" или "сохранить" в окне выбора файла. Для примера давайте введём в программу возможность выбора файла для загрузки в редактор Memo, и сохранения после редактирования.

  Итак, кидаем на Форму оба Delphi диалога, текстовый редактор Memo, и три кнопки Button. В свойство Caption одной из них записываем "Открыть...", другой - "Сохранить", третьей - "Сохранить как..."

В обработчике OnClick кнопки "Открыть..." пишем:

  if OpenDialog1.Execute then

     Memo1.Lines.LoadFromFile('OpenDialog1.FileName');

В результате выбора файла свойство FileName компонента OpenDialog получает значение полного адреса выбранного файла, который мы и вставляем в функцию загрузки файла компонента Memo.

Всё это хорошо, но только в данном случае, когда записанное выражение записывается в одну строку. Если программа использует несколько раз выражение OpenDialog1.FileName, то писать руками устанешь. В Delphi для такого случая есть так называемый "оператор присоединения" with. Он используется для любых объектов, имеющих длинный "хвост" из свойств, которые приходится записывать многократно. Вот как он записывается:

  with Объект do

    begin

    end;

Свойства Объекта внутри логических скобок begin/end можно записывать непосредственно. Естественно, в случае, когда внутри скобок находится один оператор, они необязательны. Перепишем фрагмент загрузки файла с использованием оператора присоединения:

  with OpenDialog1 do

     if Execute then

        Memo1.Lines.LoadFromFile('FileName');

Запись получается более компактной.

Так как свойства компонентов OpenDialog и SaveDialog одинаковы, сохранение текста выглядит абсолютно аналогично. Создаём обработчик нажатия кнопки "Сохранить как..." и пишем:

  with SaveDialog1 do

     if Execute then

       begin

          Memo1.Lines.SaveToFile('FileName');

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

       end;

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

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

   (В предыдущей строчке ошибка, как справедливо заметил в комментариях Oraculum - кавычки не нужны. Исправлять не буду, чтобы не исчез смысл комментария!)

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

В колонке FilterName записываем имена фильтров, в колонке Filter - список масок файлов, разделённых точкой с запятой. Маска файла в данном случае выглядит как

   * . расширение_файла ;

Звёздочка означает, что выбираются файлы с любыми именами, подходящие по расширению.

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

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




1. Петербургский государственный университет Юридический факультет Кафедра уголовного права
2. человеческих отношений в том числе теории мотиваций и илируководство Элтона Мейо Фредерика Херцберга Д
3. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата технічних наук Доне
4.  Истоки СМИ Письменная информация Древнего Востока
5. Виды- Маркированные списки
6. тема РФ по теме- Исполнение федерального бюджета- формы и методы Исполнитель- студентка
7. Понятие и виды источников гражданского прав
8.  Концепция устойчивого развития общества и международное сотрудничество
9. Говоря по правде это не только ответственность перед собой и другими
10. дослідної роботи Вкон ~ витрати на формування концепції 50 від Цндр Векс ~ витрати на експериментальні д
11. . Утвердить согласованные с Министерством здравоохранения Российской Федерации нормы бесплатной выдачи раб
12. а; ~ волевое действие покупка товара
13. Тема- Органические адаптивные организационные структуры управленияГибкие адаптивные структуры управлени
14. ЮБЕЛЫХ Копия- Прокурору города Перми Советнику юстиции А
15. Эндокрин ж~йесі 1
16. ТЕМА 1- Социальное партнерство в сфере труда1.html
17.  Знаки изгибающих моментов и поперечных сил такие же как и при расчёте на постоянную и снеговую на
18. Продолжим нашу печальную историю Но сначала еще раз о АМТ
19. 1- ведущего 1 и ведомого 2 которые прижимаются один к другому силой Fr на рисунке пружиной так что сила
20. либо делать обращенные к индивиду или группе и выраженные в любой форме устной или письменной формальной и