Top-office11.ru

IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Delphi text file

DelphiComponent.ru — бесплатно видеоуроки по Delphi, статьи, исходники

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

А ты пиши мне письма мелким почерком, поскольку места мало в рюкзаке.

Фильменная песня

Романтическое создание писем при дрожащем пламени свечи, увы, безвоз­вратно ушло в прошлое. И хотя некоторые креативные приверженцы эпи­столярного стиля упорствуют в невежестве и доверяют свои невнятные мысли бумаге, последняя сейчас в основном используется по своему пря­мому назначению, то есть для складывания фигурок оригами и издания плакатов, призывающих беречь зелёного друга (коим для нас является лес, а не крокодил Гена и не пьяный товарищ).

Все наши винчестеры, флешки, диски CD- и DVD-ROM доверху забиты фай­лами. Каждый из них имеет имя и — почти всегда — расширение, которое следует за последней точкой в имени файла и обычно указывает на назна­чение файла и формат данных, хранящихся в нём.

Систематика файлов насчитывает многие сотни типов файлов: исполняе­мых exe, видео avi, mpg, звуковых ogg, wav, музыкальных mp3, mid, но, с точки зрения Delphi, разновидностей файлов всего 3: текстовые (они имеют тип TextFile), типизированные и нетипизированные.

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

Наберите в самом простом текстовом редакторе любой сумбурный текст, который только придёт вам в голову, — его глубокий смысл только отвле­чёт нас от формы

Очень хорош для разбора текстовых файлов стандартный Блокнот, кото­рый не добавляет в файл никакой «отсебятины», в отличие от «продвину­тых» редакторов типа MS Word.

Не забудьте после набора текста нажать клавишу Return, чтобы завершить строку. Сохраните текст в файле под каким-нибудь именем — вот и готов настоящий текстовый файл! Обратите внимание, что к его названию авто­матически добавлено расширение .txt. Теперь вы можете открыть файл в любом редакторе и увидеть вашу строку в первозданном виде (естествен­но, все ваши труды по форматированию текста пойдут прахом, потому что никакая информация о ваших шрифтовых предпочтениях не сохраняет­ся!).

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

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

В обычном текстовом редакторе мы никогда не увидим, что же там, в кон­це строки, поэтому воспользуемся таким текстовым редактором, который позволяет просматривать текст в 16-ричном виде, например, подойдёт WinHex

И вот мы видим: все символы строки записаны без всяких изменений, но в конце строки находятся сразу 2 символа — $0D и $0A (или то же самое в бо­лее привычном десятичном виде — #13 и #10). Они ещё в стародавние вре­мена обозначали возврат каретки принтера и переход на новую строку. Этот анахронизм сохранился до сих пор в текстовых файлах, которые ни­чего и не знают о принтерах.

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

Независимо от того, сохраняем мы файл или загружаем его, первым де­лом нужно объявить файловую переменную типа TextFile:

Её принято обозначать буквой F (от слова File, файл), но это необязатель­но. Именно эта переменная и будет псевдонимом реального файла.

Затем нужно связать файловую переменную с именем файла, вос­пользовавшись процедурой

Её легче понять на конкретном примере.

Вот так можно связать нашу файловую переменную с файлом «osh_frc_v.txt» (так как путь к файлу не указан, то файл должен находиться в той же папке, что и само приложение!).

Теперь можно открыть файл для чтения или записи.

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

procedure Reset(var F: file); (в нашем примере — Reset(F); ) ,и можно загружать данные. Они будут считываться, начиная с первой строки.

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

Чтобы сохранить данные в файле, воспользуемся процедурой

procedure Rewrite(var F: file); ( в нашем примере — Rewrite(F); )

Она создаст новый файл с заданным именем и откроет его для записи. Будьте осторожны: если файл с таким именем уже имеется на диске, он будет уничтожен! Поэтому безопаснее записывать данные в существую­щий файл функцией

Читать еще:  Массив по возрастанию паскаль

function Append(var F: Text): Integer; ( в нашем примере — Append(F); )

В этом случае новые строки будут добавлены в файл за последней стро­кой, так что все прежние данные не пострадают.

4. Для записи данных в файл служат процедуры

procedure Write(var F: file [; P1; . ; Pn]);

procedure Writeln(var F: file [; P1; . ; Pn]);

В квадратных скобках записаны необязательные параметры, которые яв­ляются выражениями следующих типов: char, string, PChar, integer, real, boolean. Таким образом, в текстовый файл можно записывать не только символы, слова, строки, но и числа (при записи выражений логического типа в файл выводятся слова TRUE и FALSE). Количество выражений в списке вывода может быть любым.

Если в одной строке файла процедурой Write сохраняются данные разных типов, то они будут записаны друг за другом без пробелов и других разде­лителей. Процедура Writeln делает то же самое, но затем закрывает стро­ку в файле (добавляет в конец строки символы $0D$0A).

Запишет строку в кавычках (но без кавычек!). Или то же самое:

Вы также можете смешивать константы и переменные:

Если у вас есть к тому большая нужда, вы можете записать в строку числа и логические константы:

Тогда на диске появится строка:

А ты пиши мне письма мелким почерком!

123 321 TRUE

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

Процедура только с одним параметром — Writeln(F) — просто завер­шает строку, ничего в неё не записывая.

Процедуры Writeln и Write начинают записывать данные с первой строки файла, затем Writeln (!) последовательно переходит ко вто­рой строке, третьей — и так далее до конца файла. С их помощью нельзя сохранить данные в произвольной строке файла, но можно записать нужное число пустых строк процедурой Writeln(F), а уже затем записать нужную строку.

Для чтения данных из текстового файла имеются процедуры:

В квадратных скобках записаны необязательные параметры, которые яв­ляются переменными следующих типов: char, string, integer, real, PChar. Количество переменных в списке ввода может быть любым.

Мы чаще будем использовать вторую процедуру (Readln) — чтобы считать целиком всю строку в указанную строковую переменную:

Если в одной строке записаны данные других типов через пробел, напри­мер, «123 321 TRUE», то их можно считать так:

В результате выполнения этой операции значением целой переменной n будет число 123, целой переменной m — число 321, строковой переменной s — строка ‘TRUE’ (нельзя считать значение в логическую переменную!).

Не забывайте следить за соответствием типов переменных и считываемых данных, иначе возникнет ошибка!

Если процедура Readln считывает только часть данных из строки (в списке ввода меньше переменных, чем в строке), то оставшаяся часть строки будет пропущена.

Если переменные при вызове процедуры отсутствуют — Readln(F);, — то текущая строка в файле пропускается и далее считываются дан­ные из следующей строки.

Если строка считывается в переменную типа короткой строки или PChar и имеет больше символов, чем указанная максимальная длина строки, то вводимая строка усекается.

При вводе символа из файла в переменную типа char читается только 1 символ, в том числе и коды конца строки.

Процедуры Read и Readln начинают считывать данные с первой строки файла, затем Readln (!) последовательно переходит ко вто-рой строке, третьей — и так далее до конца файла. С их помощью нельзя считать данные из произвольной строки файла, но можно пропустить нужное число строк процедурой Readln(F), а уже затем считать нужную строку.

5. После завершения операций с файлом он должен быть закрыт процеду­рой:

procedure CloseFile(var F: file);( в нашем примере — CloseFile(F); )

Delphi text file

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

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

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

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

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

Читать еще:  Http ohsoft net en products php

В качестве типа могут использоваться базовае типы, или создаваться свои. Важно только, чтобы для типа был точно известен фиксированный размер в байтах, поэтому, например, тип 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, 1);
Reset(SaveF, 1);

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

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

При этом чтение и запись производится с текущей позиции указателя, затем указатель устанавливается на следующую запись. Можно проверить, существует ли нужный файл, оператором 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

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

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

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

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

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

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

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

Читать еще:  Delphi mouse event

var
f : TextFile;

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

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

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

AssignFile(f, ‘datainput.txt’ ); // во вложенной папке относительно директории с программой
AssignFile(f, ‘..input.txt’ ); // на уровень выше директории с программой
AssignFile(f, ‘..datainput.txt’ ); // во вложенной папке на уровень выше директории с программой

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

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

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

Reset(f, ‘C:myproginput.txt’ ); // чтение
Rewrite(f, ‘C:myproginput.txt’ ); // запись

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

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

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

while ( not EOF(f)) do begin
Readln(f, s);
end ;

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

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

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

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

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

var
f : TextFile;
s : String;
begin
AssignFile(f, ‘input.txt’ );
Reset(f);

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

var
f : TextFile;
s : String;
begin
AssignFile(f, ‘input.txt’ );
Reset(f);

while ( not EOF(f)) do begin
Readln(f, s);
myMemo.Lines.Add(s);
end ;

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

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

var
f : TextFile;
begin
AssignFile(f, ‘input.txt’ );
Rewrite(f);

Writeln(f, ‘My text’ );

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

var
f : TextFile;
i : Integer;
begin
AssignFile(f, ‘input.txt’ );
Rewrite(f);

for i := 0 to myMemo.Lines.Count — 1 do
Writeln(f, myMemo.Lines[i]);
CloseFile(f);
end ;

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

Запись в текстовый файл

07.04.2008, 16:08

Запись в текстовый файл
Помогите,пожалуйста! Нужно записать данные в файл, через TButton. Нажимаешь кнопку и данные.

Запись в текстовый файл
procedure FindFiles(StartFolder, Mask: string; List: TStrings; ScanSubFolders: Boolean = True);.

Запись в текстовый файл
Добрый день. Подскажите пожалуйста новичку, что не так делаю. Как сделать чтоб он сохранял до 5.

Запись в текстовый файл
Подскажите, на форме 4 edit и 1 memo . В каждый edit вписываю 2-3 слова , и в memo несколько строк.

07.04.2008, 19:522
Delphi
08.04.2008, 18:323
08.04.2008, 19:204
08.11.2008, 12:335
08.11.2008, 17:226
Delphi
05.08.2009, 22:517

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

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

06.08.2009, 07:418
08.08.2009, 21:359
01.02.2011, 18:5710
01.01.2013, 09:3811

Ребят, еще один вопрос, как добавить разрыв строки при записи в файл?

01.01.2013, 13:5112
Delphi
01.01.2013, 18:1913
Delphi
02.01.2013, 01:5714
02.01.2013, 01:57
02.01.2013, 01:57

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

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

Запись из мемо в текстовый файл
Как перейти на следующую строку для записи в текстовом файле. Т.к этот код заменяет первую строку.

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

Запись в текстовый файл с использованием TFileStream
Изучая разные потоки — наследники класса TStream, попробовал следующий код: Type TFullName =.

Ссылка на основную публикацию
Adblock
detector
×
×