Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TP_ вторая часть_новый.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
182.78 Кб
Скачать

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

Рассмотрим текстовые файлы, т.е. файлы, состоящие из строк. Каждая строка заканчивается символами с кодами #10 и #13. Оканчивается файл признаком конца файла EOF (EOF – End Of File).

строка1 #13 #10

строка2 #13 #10

………………

EOF

Для работы с файлами надо:

  1. Установить связь программы с файлом

  2. “Открыть” файл для чтения или записи

  3. Читать из файла или записать в файл

  4. Закрыть файл.

Рассмотрим следующие процедуры:

Assign (f, ’c:\file.dat’) – связывает внешний файл с файловой переменной f.

Reset (f) – открывает файл только для чтения.

Rewrite (f) – открытие файла только для записи.

Append(f) – открытие файла для пополнения.

Close (f) – закрытие файла.

Write (f, x) – записывает в файл f значение x

Writeln (f,x) - ……………..(аналогично)

Read (f,x) – читает данные из файла f и помещает прочитанное в переменную x.

Readln (f,x) - ……………(аналогично)

Фукции:

Eof(f) – True, если указатель находится в конце файла.

Eoln(f) – True, если указатель находится в конце строки.

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

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

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

Пример. Файл file.txt содержит текст. Посчитать количество строк в тексте.

program….

var f1:text;

k:integer;

begin

assign (f1, ‘c:\temp\file.txt’);

reset (f1);

k:=0;

while not Eof(f1) do

begin

readln(f1);

k:=k+1; {считаем количество символов в строке}

end;

writeln(‘Количество строк =’, k);

close(f1);

end.

Пример. В текстовом файле file.txt определить длину самой большой строки.

program ….

var f1:text;

max, k:integer;

c:char;

begin

assign (f1, ‘c:\temp\file.txt’);

reset (f1);

max:=0;

while not Eof(f1) do

begin

k:=0;

while not Eof(f1) do {каждая строка прочитывается посимвольно}

begin

read(f1, c);

k:=k+1; {считаем количество символов в строке}

end;

if k>max then max:=k;

readln(f1);

end;

writeln(‘Наибольшая строка имеет’, max, ‘знаков’);

close(f1);

end.

Замечание: в этом примере строки прочитываются посимвольно, т.к. var с: char (можно считывать всю строку, тогда var c: string,

readln(f1,c); k:=length(c), без второго цикла while).

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

Program File_2;

var

ftext:text;

name:string[8];

Procedure OpenFile;

{Процедура открытия для записи файла }

begin {OpenFile}

write (‘введите имя файла’);

write (‘(не более 8 символов); ’ );

read (name);

assign (ftext, ‘c:\temp\name.txt’);

{файловая переменная ftext связывается с именем файла}

rewrite (ftext);

{файл открывается для записи}

end; {OpenFile }

Procedure WriteToFile

{процедура ввода данных в текстовый файл}

var

x:real;

begin { WriteToFile }

write (‘последовательно вводите’);

writeln (‘действительные числа.’);

write (‘ввод каждого числа завершайте’);

writeln (‘нажатием клавиши Enter.’);

write (‘для окончания ввода данных’);

writeln (‘нажмите клавиши Ctrl+Z и Enter’);

while not Eof do

begin

readln(x); {ввод очередного числи с клавиатуры}

writeln(ftext,x:5:2); {запись очередного числа в файл}

end;

close(ftext) {файл закрывается}

end; { WriteToFile }

Procedure ReadFile;

{процедура открывает для чтения текстовый файл и выводит на экран содержащиеся в нем числа, а так же определяет их сумму}

var

s, sum: real;

begin {ReadFile}

sum:=0;

reset (ftext); {файл открывается для чтения}

write (‘Файл ’, name:9);

writeln (‘содержит следующие числа‘ );

while not Eof do

begin

readln (ftext,x); {чтение очередного числа их файла}

writeln (x:10:5); {вывод очередного числа на экран}

sum:=sum+x; {вычисление суммы}

end;

writeln (‘сумма чисел в файле: ’, sum:10:5);

end; {ReadFile}

begin {Program}

write (‘определение суммы чисел ’);

write (‘содержащихся в’);

writeln (‘текстовом файле’);

writeln;

OpenFile;

WriteToFile;

RwadFile:

readln;

end. {Program}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]