Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию..pdf
Скачиваний:
10
Добавлен:
15.11.2022
Размер:
12.2 Mб
Скачать

Write(>? О;

ReadLn(T)

End;

WriteLn('BBOfl данных закон чен !');

Close(Ft)

End.

В результате работы этой программы на диске будет создан файл

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

нить следующие действия:

описать файловую переменную;

описать переменную того же типа;

выполнить назначение (Assign);

открыть файл для чтения (Reset);

в цикле читать из файла (Read);

закрыть файл (close).

П ример 2. Определить среднюю температуру для значений, хра­ нящихся в файле Temp.dat.

Program Task2;

 

 

 

Var Ft

File Of Real;

 

T,

St

Real;

 

 

N

Integer;

'Temp.dat');

Begin

Assign(Ft,

 

Reset(Ft);

 

 

 

St

:= 0;

Eof(Ft)

Do

 

While Not

 

Begin

T);

 

 

 

Read(Ft,

 

 

 

St := St

+ T

 

 

 

End;

 

 

 

 

N

:= FileSize(Ft);

 

St

:= St

/ N;

 

 

 

WriteLn('Средняя температура за ', N 3,* суток равна*>

 

Close(Ft)

St

7

2, ' градусов');

End.

 

 

 

 

 

 

 

 

В этой программе использована функция определений размера файла:

.Fiiesize(<HMH файловой переменной>);

Ее результат — целое число, равное текущей длине файла. Замечаддо. согласно стандарту Паскаля в файл, открытый оператором Rewrite, можно только записывать информацию; а файл, открытый оператором Reset, можно использовать только для чтения. В ТУрбоПаскале допускается запись ( Write) в файл, открытый для чтения (Re­ set). Это создает определенные удобства для модификации файлов.

 

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

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

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

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

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

Var <идентификатор> text;

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

1Si 1 S2 | 1s kl Iм.к.с. ISi 1S21 |Sfa1м.к.с. I IМ.К.Ф1

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

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

Впрограммах на Паскале для работы с текстовыми файлами наряду

спроцедурами read и write употребляются процедуры readirt и writeln.

Readln(FV, <список ввода>).

Эта процедура читает строку из файла с именем F V ) помещая прочи­ танное в переменные из списка ввода.

Writeln(FV, Ссписок вывода>).

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

Для обнаружения конца строки в текстовом файле используется функция

Eoln(FV)

(end of line — конец строки). Это логическая функция, которая при­ нимает значение true, если указатель файла достиг маркера конца строки, В противном случае — false.

Употребление операторов read и Feadln без указания имени файло­ вой переменной обозначает чтение из стандартного файла input (ввод с клавиатуры). Употребление операторов write и writeln без имени файловой переменной обозначает запись в стандартный файл output (вывод на экран). В таком варианте этими операторами мы уже мно­ гократно пользовались. Считается, что файлы input и output всегда открываются соответственно для чтения и записи при работе любой программы.

При вводе с клавиатуры маркер конца строки обнаруживается при нажатии клавиши <ввод>.

Процедура геаdin может использоваться без списка ввода. В этом случае происходит пропуск текущей строки в читаемом файле.

Употребление процедуры writeln без списка вывода обозначает вы­ вод пустой строки (в файле выставляется маркер конца строки).

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

П ример 1. Пусть файл с именем NOTE.TXT содержит некоторый текст. Требуется подсчитать количество строк в этом тексте.

Var Note Text;

КInteger;

Begin Assign(Note, ’Note.txt');

Reset(Note);

К := 0;

While Not

Eof(Note)

Do

 

Begin

 

 

 

ReadLn(Note);

 

 

К := К

+ 1

 

 

End;

 

 

 

WriteLn(*Количество

строк равно

К);

Close(Note)

 

 

End.

 

 

 

Используемый здесь оператор readln(Note) “пролистывает” строки из текстового файла Note, не занося их в какую-либо переменную.

П ример

2.

В текстовом файле N ote.txt определить длину самой

большой строки.

 

Var Note

К

Text;

 

Max,

Integer;

C

Char;

 

Begin

 

 

 

Assign(Note, 'Note.txt*);

Reset(Note);

 

Max := 0;

Eof(Note)

Do

While Not

Begin

 

 

 

К := 0;

 

While

Not Eoln(Note) Do

Begin

 

 

Read(Note, C);

 

К

:= К + 1

 

End;

 

 

If К

> Max

 

Then Max :» K;

 

ReadLn(Note)

 

End;

 

 

строка имеет *, Max, * знаков});

WriteLn('Наибольшая

Close(Note)

 

End.

 

 

 

Здесь каждая строчка прочитывается посимвольно, при этом в пере­ менной К работает счетчик числа символов в строке. В переменной Мах отбирается наибольшее значение счетчика.

П ример 3. Решается следующая механическая задача. Под дей­ ствием силы F с начальной скоростью V в вязкой среде движется тело массой М. Сопротивление пропорционально квадрату скороеin с ко­ эффициентом К. Определить время прохождения пяти контрольных точек траектории, расстояние до которых от точки старта заданы.

Пусть с помощью текстового редактора в фалле DATE.TXT сформи­ рованы исходные данные в форме следующей таблицы:

И С Х О Д Н Ы Е

Д А Н Н Ы Е

М (кг)

F (Н) V (м/с)

К (кг/м)

36.3

2000

50.5

0.5

Координаты контрольных точек (м)

х(1)

х(2)

х(3)

х(4)

х(5)

10

100

150

1000

3000

Требуется ввести числовые данные в вещественные переменные М, F, V, К и массив Х"[1..5], произвести расчеты и получить результаты в массиве Т[1..5]. Результаты следует вывести на экран, а также в текстовый файл на диске с именем Rssult.txt.

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

Var М,

F,

V,

К

Real;

I

Integer;

 

Т,

X

Array[1..5] Of Real;

FR,

FD

 

Text;

Begin

 

 

’DATE.TXT’);

Assign(FD,

Reset(FD);

’Result.txt’);

Assign(FR,

Rewrite(FR);

{____ Пропуск первых трех строк____ > ReadLn(FD);

ReadLn(FD);

ReadLn(FD);

{___________ Ввод данных____________ }

ReadLn(FD, M,

F, V, К);

{____ Пропуск

трех строк_________}

ReadLn(FD);

 

ReadLn(FD);

 

ReadLn(FD);

 

{___________ Ввод данных____________ } For I :« 1 То Б Do

Read(FD, X[I]);

{ РАСЧЕТНАЯ ЧАСТЬ ПРОГРАММЫ }

{____ Вывод результатов на экран и в файл FR____ > WriteLn(’Результаты ’);