Файл — структура данных, находящаяся на носителе данных (энергонезависимом или энергозависимом).
Содержание
- 1 Типы файлов.
- 2 Текстовые файлы.
- 3 Типизированный файл.
- 4 Нетипизированные файлы.
- 5 Файловая переменная.
- 6 Оператор AssignFile.
- 7 Запись в текстовый файл.
- 8 Процедура WriteLn.
- 9 Процедура Write.
- 10 Процедура ReadLn.
- 11 Процедура Read.
- 12 Создание нового файла.
- 13 Открытие существующего файла.
- 14 Добавление записей в существующий файл.
Подробное рассмотрение работы с текстовым файлом «Delphi работа с файлами«.
Типы файлов.
В Delphi различают три типа файлов:
- текстовые
- типизированные
- нетипизированные
Текстовые файлы.
В тектсовых файлах хранится информация, интерпретируемая как непрерывный последовательный набор текстовых символов.
Типизированный файл.
В типизированном файле информация хранится как набор последовательностей, имеющих одинаковую длину. Тип каждой последовательности может быть:
- Порядковый
- Вещественный
- Массив
- Запись
- Множество
Нетипизированные файлы.
Исходная информация переводится в двоичный вид, разбивается на блоки одинакового объёма и записывается на носитель.
Файловая переменная.
С помощью файловой переменной указывается тип файла.
- varF=TextFile; текстовый файл
- varF=File of тип_допустимый_для_типизированного_файла
Например: varF=File of integer; - varF=File; — нетипизированный файлж
Оператор AssignFile.
Этот оператор связывает файловую переменную и путь доступа к файлу. Формат оператора:
AssignFile(varF, «путь_доступа_к_файлу»)
Запись в текстовый файл.
Запись осуществляется операторами WriteLn и Write
Процедура WriteLn.
Формат процедуры:
Procedure WriteLn( varF, Var1,Var2,Var3, … , VarI, … , VarN)
Процедура записывает символьные представления переменных. После переменной VarN будет записан признак конца строки EOLN (End of Line).
Это делается с помощью двух следующих друг за другом символов с кодами #13 и #10.
Чтобы записать следующую строку, надо вновь применить процедуру WriteLn, и так далее.
Например. s1:=’123′; s2:=’abc’; s3:=’456′; s4:=’xyz’;WriteLn( varF, s1,s2); WriteLn( varF,s3,s4); Будут сфомированы две строки:
При закрытии файла последним записывается символ EOF (End of File) с кодом #26.
Формат записи в файл.
Запись производится посимвольно. Каждый символ занимает 1 байт (или 2 байта в системе Unicode). Например, слово АБВГ займёт 4 байта, а целое число 123456 займёт 6 байт.
Процедура Write.
Она аналогична процедуре WriteLn,но не вставляет символы конца строки. Если в предыдущем примере заменить WriteLn на Write, то будем иметь:
Процедура ReadLn.
Однократное применение рпоцедуры приводит к считыыванию одной строки.
Например. Файл записан двукратным применением процедуры WriteLn. Применим двукратно процедуру ReadLn(varF,s); где s — строковая переменная.
Первое прочтение даст s=’123abc’, а второе s=’456xyz’.
Замечание 1. Хотя во многих учебниках говорится, что справедлива форма процедуры ReadLn(varF,s,s1,s2, …, sN);, практика показывает, что считывание производится только в переменную s. Остальные переменные принимают значение «пусто».
Замечание 2.Если применить процедуру в виде ReadLn(varF), то будет просто пропущена очередная запись.
Процедура Read.
Если файл записан с помощью процедуры WriteLn, то процедура Read стчитывает только первую запись. Второе применение Read приводитк тому же результату, то есть считываение не идёт дальше первой записи.
Если файл записан с помощью процедуры Write, то Read(varF,s) прочитает весь файл до конца и разместит его содержимое в переменной s.
Например. Если файл сформирован с помощью процедуры Write (как показано выше):
то Read(varF,s) вернёт s=123abc 456xyz.
Запись чисел в текстовый файл.
Целые и вещественные числа записываются обычным образом.
Например, writeLn(varF,i); где i — переменная целого типа. Аналогично записывается вещественное число.
Запись числа можно считать или обычным образом, представив его в виде строки: ReadLn(varF,s), или непосредственно в формате целого числа: ReadLn(varF,i).
Для вещественного числа процедура ReadLn(varF,s)вернёт:
Пара операторов:
readLn(varF,r);
edit4.Text:=floatToStr(r); где r — переменная вещественного типа, вернёт:
Создание нового файла.
Процедура ReWrite(varF) либо создаёт новый файл, либо уничтожает уже имеющийся и на его месте создаёт новый.
Открытие существующего файла.
Существующий текстовый файл можно открыть для чтения.
Процедура Reset(varF) открывает файл для чтения (или переоткрывает его). Указатель файла перемещается в начальную позицию.
Добавление записей в существующий файл.
Добавить новую запись в текстовый файл можно только в его конец.
Процедура Append(varF) открывает текстовый файл для добавления записи в конец текстового файла.
Пример.
procedure TForm1.Button1Click(Sender: Tobject);
var f:textFile;
begin
assignFile(f,’myTextFile.txt’);//так как не указан полный путь доступа к файлу, он запишется в папку с «.exe» файлом программы.
rewrite(f);//создаем (или пересоздаём) файл
//пока ничего не записываем
closeFile(f);//закрываем файл. Если файл не закрыть, к нему нельзя будет обратиться из другого процесса (например, попытка чтения self.ListBox1.Items.LoadFromFile(‘myTextFile.txt’); вызовет ошибку);
end;
procedure TForm1.Button2Click(Sender: Tobject);
var s,s1:string; f:textFile;
begin
assignFile(f,’myTextFile.txt’);
append(f);//открываем файл для добавления записей
s:=’123′;
s1:=’abc’;
writeLn(f,s,s1);//записываем первую строку
s:=’456′;
s1:=’xyz’;
writeLn(f,s,s1);//записываем вторую строку
closeFile(f);//закрываем файл
self.ListBox1.Items.LoadFromFile(‘myTextFile.txt’);//отображаем содержимое файла в компоненте ListBox1
end;
В результате имеем:
procedure TForm1.Button3Click(Sender: Tobject);
var s,s1,s2,s3,s4:string; f:textfile; i,ii:integer; c:char; r:real;
begin
assignfile(f,’3.txt’);
reset(f);//открываем текстовый файл для чтения
readLn(f,s);//читаем первую строку
self.Memo1.Lines.Add(s);//добавляем строку в компонент «Tmemo»
readLn(f,s);//читаем вторую строку
self.Memo1.Lines.Add(s);
closeFile(f);
end;
В результате будем иметь:
procedure TForm1.Button4Click(Sender: Tobject);
var s,s1:string; f:textFile;
begin
assignFile(f,’myTextFile.txt’);
append(f);//открываем файл для добавления записей
s:=’123′;
s1:=’abc’;
write(f,s,s1);//записываем первую строку
s:=’456′;
s1:=’xyz’;
write(f,s,s1);//записываем вторую строку
closeFile(f);//закрываем файл
self.ListBox1.Items.LoadFromFile(‘myTextFile.txt’);//отображаем содержимое файла в компоненте ListBox1
end;
В результате имеем:
procedure TForm1.Button5Click(Sender: Tobject);
var s,s1:string; f:textFile;
begin
assignfile(f,’3.txt’);
reset(f);
read(f,s);
self.Memo1.Lines.Add(s);
closeFile(f);
end;
В результате имеем:
Посимвольное прочтение файла.
procedure TForm1.Button6Click(Sender: Tobject);
var s,s1:string; f:textFile; c:char;
begin
assignfile(f,’3.txt’);
reset(f);
repeat
read(f,c);
memo1.Lines.Add(c);
until eoln(f);//читаем посимвольно до тех пор, пока не достигнем конца строки
repeat
read(f,c);
memo1.Lines.Add(c);
until eoln(f);
closeFile(f);
end;
В результате имеем:
Замечание. Можно сразу прочитать весь файл до конца:
repeat
read(f,c);
memo1.Lines.Add(c);
until eof(f);//завершить, когда будет достигнут конец файла.
***