Как сохранить в файл в делфи

Обновлено: 03.07.2024

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

procedure WriteToFile(var F: file; const str: string); var Len: LongInt; begin Len := Length(str); BlockWrite(F, Len, SizeOf(Len)); if Len > 0 then begin BlockWrite(F, Str[1], Length(Str) * SizeOf(Str[1])); end; end;

procedure WriteToFile(var F: file; const Int: Integer); var LInt: LongInt; begin LInt := Int; BlockWrite(F, LInt, SizeOf(LInt)); end;

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

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

procedure WriteToFile(var F: file; const IntegerArray: TIntArray); var i: Integer; Len: LongInt; begin Len := Length(IntegerArray); BlockWrite(F, Len, SizeOf(Len)); if Len > 0 then begin for i := Low(IntegerArray) to High(IntegerArray) do begin WriteToFile(F, IntegerArray[i]); end; end; end;

Ниже показано как можно сохранить в ваш файл изображение в формате JPEG. Важно понимать, что даже если в файл будет сохранено одно только изображение, редактором оно уже не откроется, нужно будет извлекать его из файла таким же образом. Именно поэтому данный способ сохранения подходит только для составных типов. Например когда вы хотите сохранить картинку вместе с какой то информацией:

procedure WriteToFile(var F: file; const Image: TJPEGImage); var Len: LongInt; ImageStream: TBytesStream; begin ImageStream := TBytesStream.Create; Image.SaveToStream(ImageStream); Len := Length(ImageStream.Bytes); BlockWrite(F, Len, SizeOf(Len)); BlockWrite(F, ImageStream.Bytes[0], Len); ImageStream.Free; end;

И в конце, как обещал общая процедура сохранения в файл например массива целых чисел и изображения в формате Jpeg:

procedure Save(const FileName: string; const IntegerArray: TIntArray; const Image: TJPEGImage); var F: file; begin Result := False; AssignFile(F, FileName); Rewrite(F, 1); try WriteToFile(F, IntegerArray ); WriteToFile(F, Image ); finally CloseFile(F); end; end;

В процедуру передается имя файла, динамический массив целых чисел и изображение в формате Jpeg. Как видите все просто. Главное помните, что чтение всех данных должно происходить строго в том же порядке, что и запись. Для удобства метод WriteToFile я делаю перегруженным, и в зависимости от типа переданного аргумента, компилятор сам выбирает метод сохранения в файл. Пример достаточно примитивен, но отражает суть процесса в целом. Например можно было создать запись состоящую из массива целых чисел и картинки, реализовать WriteToFile для нее и использовать в дальнейшем. Примерно вот так:

Подскажите, как создать txt-шник, записать в него строку и сохранить всё это дело.

Добавлено через 16 минут
и чтобы это всё делало при нажатии на Button

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Создать .txt файл с именем <СегодняшняяДата> и записать в него текст
Подскажите, как создать .txt файл с именем &lt;СегодняшняяДата&gt; и записать в него текст, а если такой.

Открыть для записи текстовый файл data.txt и записать в него полученный массив, закрыть файл
Составить программу с подпрограммами для выполнения следующего алгоритма (предусмотреть процедуры.

Как создать файл id.txt и в него записать значение переменной
у меня есть переменна $id как создать файл id.txt и в него записать значение переменной $id ?

Как сохранить текст из textBox в txt файл
pajalusta pamagita Как сохранить текст из textBox в txt файл no v kode napisat v kakaom imenna.

SERZHant5, ну это же стандартная ситуация - гуглить не пробывали?

Добавлено через 2 минуты
вот нашел в яндексе:

Я пробовал эту прогу, но выдаёт такую ошибку, чё делать и что она означает? Как сделать прогу(консоль) в которую вводят некоторую строку и прога её сохряняет в txt-шнике при нажатии на кнопку Button

Добавлено через 1 минуту

прогу(консоль) в которую вводят некоторую строку и прога её сохряняет в txt-шнике при нажатии на кнопку Button ты определись, консольное приложение или визуальное. какая кнопка button в консоли? ты определись, консольное приложение или визуальное. какая кнопка button в консоли? Визуальное, а кнопка Button, просто кнопка при нажатии на которую я уже ранее говорил что должно произойти Ок, всё получилось, спасибо. А как теперь сделать так, чтобы программа в текст вставляла то, что ввели в текстовую строку? writeln(FileOut,'Данные в файл записаны');//здесь запишете то что нужно

Спасибо конечно, но можете что нибудь попроще компонента memo, потому что я ток недавно ООП увлёкся и даже незнаю что такое этот компонент.
Мне нужно соединить 2 проги, чтобы полученная состояла из текстового поля и кнопки :
1я прога 1)При нажатии на кнопку, прога создаёт txt-шник и сохраняет его с текстом внутри
2я прога 2)Вводя в текстовое поле строку, программа должна делать то что описано в пункте 1. Роль сохраняемого текста играет вводимая в текстовое поле строка

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

Итак, в общем виде, работа с файлом заключается в следующих этапах:

1. подключение к файлу – связь с внешним файлом, указание режима подключения;

2. выполнение операций записи в файл или чтения из файла;

3. завершение работы с файлом.

Подключение к файлу

Для связи программы с файлом используется специальная переменная – "Файловая переменная". Объявляется она так же как и любая переменная в Delphi. Тип это переменной может быть File для типизированных (хранящих данные определенного типа) файлов, а можно указать TextFile, что будет означать тип обычного текстового файла. Объявление переменной:

В исполняемом коде программы выполняется подключение к внешнему файлу:

Команда AssignFile, выполняет связь файловой переменной с внешним файлом. Вторым параметром указывается адрес файла. Он может быть задан относительным или абсолютным. Если указать только имя файла, то программа будет пытаться обнаружить его в той же директории, где она сама и находится. Абсолютный путь указывается от корневого диска:

Использование относительной директории дает возможность не привязываться к конкретным дискам и адресам. Например:

После того как выполнено подключение, выполняется процедура, устанавливающая режим работы с файлом. В основном это режим чтения или записи. Эти режимы назначаются процедурами Reset() ( для чтения) и rewrite() (для записи):

* Для команды Rewrite() следует учитывать, что при ее выполнении, она либо создает файл, указанный в файловой переменной, либо если он уже есть перезаписывает файл заново, удаляя старый без какого-то предупреждения.

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

Операции с файлами

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

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

Для записи, назначение режим записи в файл и командой Writeln() производится запись по строкам.

Закрытие файла

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

Примеры работы с текстовыми файлами в Delphi

Чтение в переменную одного значения из файла:

Загрузить все строки файла в компонент Memo:

Следует отметить, что для этой задачи проще воспользоваться командой самого компонента Memo LoadFromFile().

Записать строку в файл:

Записать в текстовый файл все строки из компонента Memo:

Как и для чтения из файла в Memo, так и здесь, имеется специальная команда:

Приступим к программированию пунктов меню Открыть, Сохранить, Сохранить как…, Выход.

Нам понадобится общая переменная fFilePath типа String для всех процедур, которая будет хранить полный путь к открытому файлу. Опишем ее в разделе var перед ключевым словом implementation следующим образом :


Такой способ описания позволяет сразу «обнулить» нашу переменную.

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


После чего откроется редактор кода с созданной процедурой TForm1.fOpenClick

В нее необходимо поместить следующий код:

if fOpenDialog.Execute then
begin
fFilePath:=fOpenDialog.FileName;
txt.Lines.LoadFromFile(fFilePath);
end;

Функция Execute диалога fOpenDialog открывает окно выбора файла. При выборе файла и нажатия кнопки Открыть, функция возвращает True, если нажата кнопка Отмена, то false. Обратите внимание, диалог вызывается с использование условия if, т.е. мы проверяем результат выполнения Execute.Если результат Истина, то мы продолжаем открытие файла, если Иначе, то ничего не происходит. Если не сделать такую проверку, диалог сработает при выборе файла, но если пользователь откажется открывать файл и нажмет Отмена, выскочит ошибка т.к. txt.Lines.LoadFromFile попытается открыть файл, который не выбран.

В данной процедуре мы присваиваем переменной fFilePath, полный путь к выбранному файлу вида «x:\mytxt\txtFile.txt», который возвращает функция FileName диалога fOpenDialog и загружаем текст в txt.

Вот и все открытие файла.

Далее пункт «Сохранить как…».

Так же кликаем по данному пункту и в созданной процедуре TForm1.fSaveAsClick пишем код:

if fFilePath='' then fsavedialog.FileName:='Новый документ.txt'
else fsavedialog.FileName:=fFilePath;

if fSaveDialog.Execute then
begin

if extractfileext(fSaveDialog.FileName)='' then
fFilePath:=fSaveDialog.FileName+'.txt'
else fFilePath:=fSaveDialog.FileName;

txt.Lines.SaveToFile(fFilePath);
end;

Эта процедура посложнее. Объясню ее работу:

Первое условие IF – это по сути украшение, проверяет переменную fFilePath и если она пуста, то в поле указания имени файла выведет имя по умолчанию «Новый документ.txt». Переменная fFilePath пуста только в том случае, если мы будем создавать документ, а не открывать его для редактирования. Если же переменная fFilePath не пуста, то будет выведено имя файла, который был открыт.

Второе условие IF – выполняет запуск диалога сохранения.

Третье условие IF – проверяет, имеет ли введенное имя файла расширение, если введено просто имя файла без его расширения, то к имени добавляется «.txt». Функция extractfileext извлекает из полного имени файла его расширение. Например, файл «Мой блокнот.txt», функция вернет его расширение «txt». Если не сделать данную проверку и присоединение расширения, то будет создан файл без указанного расширения, и в системе он будет не опознанным. Если же оставить только присоединение расширения и при этом имя файла будет «Мой блокнот.txt», то к имени будет добавлено еще расширение «txt», в результате получим файл «Мой блокнот.txt.txt».

Теперь пункт «Сохранить». Обратите внимание, во всех редакторах, если создать новый документ и нажать на «Сохранить», то будет открыт диалог «Сохранить как», если же документ открыт для редактирования, то происходит просто сохранение изменений. Реализуем тоже самое в нашем блокноте.

Создаем процедуру TForm1.fSaveClick вышеуказанным способом и пишем следующий код:

if fFilePath='' then fSaveAs.Click
else txt.Lines.SaveToFile(fFilePath);

т.е. мы проверяем переменную fFilePath, если она пуста, то вызываем процедуру пункта меню «Сохранить как…» - fSaveAs. По сути, мы программно «нажимаем» на пункт меню «Сохранить как…». Если же файл был открыт, то просто сохраняем изменения в файл.

И последний пункт меню «Выход».

Команда данного пункта проста и однострочна:

Вот так выглядит полный листинг нашей программы (по основным пунктам я расставил комментарии). Исходники и скомпилированный проект в прикрепленном архиве.

unit exNotepad;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;

type
TForm1 = class(TForm)
txt: TMemo;
MainMenu1: TMainMenu;
N1: TMenuItem;
fOpen: TMenuItem;
fSave: TMenuItem;
fSaveAs: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
fOpenDialog: TOpenDialog;
fSaveDialog: TSaveDialog;
procedure fOpenClick(Sender: TObject);
procedure fSaveAsClick(Sender: TObject);
procedure fSaveClick(Sender: TObject);
procedure N3Click(Sender: TObject);

private

public

end;

var
Form1: TForm1;
fFilePath: string = '';

implementation

procedure TForm1.fOpenClick(Sender: TObject);
begin
//запуск диалога открытия файла
if fOpenDialog.Execute then
begin
fFilePath:=fOpenDialog.FileName;
txt.Lines.LoadFromFile(fFilePath);
end;
end;

procedure TForm1.fSaveAsClick(Sender: TObject);
begin
//если fFilePath пусто, то выводим имя по умолчанию
if fFilePath='' then fsavedialog.FileName:='Новый документ.txt'
// если fFilePath не пусто
else fsavedialog.FileName:=fFilePath;

//запуск диалога сохранения
if fSaveDialog.Execute then
begin

//проверяем есть ли расширенеие у заданного файла
//если нет, то задаем .txt
if extractfileext(fSaveDialog.FileName)='' then
fFilePath:=fSaveDialog.FileName+'.txt'
//если есть, то оставляем
else fFilePath:=fSaveDialog.FileName;

//сохраняем файл
txt.Lines.SaveToFile(fFilePath);
end;
end;

procedure TForm1.fSaveClick(Sender: TObject);
begin
//если fFilePath пуста то открывает диалог сохранения
if fFilePath='' then fSaveAs.Click
//иначе просто сохраняем открытый файл
else txt.Lines.SaveToFile(fFilePath);
end;

procedure TForm1.N3Click(Sender: TObject);
begin
form1.Close;
end;

end.

П.С. Для того чтоб при открытии текста, появились полосы прокрутки у объекта Memo (txt) необходимо указать свойство ScrollBars = ssBoth.


Прикрепленный файл: exNotepad v1.1.zip

Читайте также: