while not eof f do begin что это

Pascal: Занятие № 12 Часть1. Работа с файлами в паскале (текстовые файлы)

Работа с файлами в паскале

Виды файлов в зависимости от их описания и режимом работы

Описание файловых переменных:

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

где myfile — имя переменной (объявленной ранее в области var ), ассоциированной с файлом
c:\text.txt — путь к реальному файлу
Первый аргумент процедуры assign в паскаль — переменная, второй – путь к файлу на диске.

Текстовые файлы в паскале: процедуры работы

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

Возможные расширения файлов:
*.txt, *.log,
*.htm, *.html

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

Предусмотрены два режима работы: режим для записи в файл информации и для чтения ее из файла. Одновременная запись и чтение запрещены.

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

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

Рассмотрим дальнейшую последовательность работы с ним, и рассмотрим процедуры, необходимые для работы с текстовым файлом в Паскале:

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

процедура открытия создаваемого файла для записи в него информации; если файл с таким именем уже существует, то информация в нем стирается:

Источник

Ввод-вывод, оператор присваивания, арифметические операции

Теоретический материал: файловый ввод-вывод (Паскаль)

Файлы. Виды файлов. Основные процедуры для работы с файлами

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

Определение. Файлом называется область памяти на диске, имеющая свое имя.

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

Физические файлы можно по-разному представить в программе. Язык Турбо Паскаль предлагает три вида представления файлов:

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

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

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

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

С каждым файлом можно связать понятие «текущий указатель». Это неявно описанная переменная, которая указывает на конкретный элемент файла. Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который «смотрит» текущий указатель, перемещающийся в результате выполнения действия на следующий элемент.

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

— связать ее с конкретным физическим файлом процедурой assign;

— открыть файл процедурой reset или rewrite;

— выполнить чтение или запись информации;

— по окончании работы с файлом закрыть файл процедурой close.

Формат объявления файловых переменных и особенности работы с различными видами файлов (типизированными, нетипизированными, текстовыми) будут подробно изложены далее.

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

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

Сначала рассмотрим процедуры модуля System.

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

До начала работы с файлами устанавливается связь файловой переменной МуFilе с именем дискового файла. Очень важно различать собственно файл (область памяти на магнитном носителе с некоторой информацией) и переменную файлового типа в Turbo Pascal-программе. Считается, что файловая переменная является представителем некоторого дискового файла в программе. Для того, чтобы реализовать доступ к файлу на магнитном диске, программа должна связать его с файловой переменной. Для этого необходимо установить соответствие между переменной и именем файла. Это имя представляется в виде строки, содержащей имя файла и, может быть, путь к файлу, который формируется по общим правилам MS-DOS.

assign (МуFilе, ‘с:\МуDirectory\Result.dat’);

здесь приведено полное (с указанием пути) имя пользовательского файла Result.dat.

Не разрешается связывать с одним физическим файлом разные файловые переменные программы.

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

После того, как файловая переменная с помощью процедуры Аssign связана с конкретным дисковым файлом, с ним можно выполнить любую допустимую операцию.

Внимание! Нельзя применять процедуру assign к открытому файлу.

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

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

Эта процедура создает на диске файл с именем, связанным с переменной МуFilе процедурой Аssign. Указатель работы с файлом устанавливается на начало файла. После выполнения процедуры rewrite файл доступен как для записи, так и для чтения (в случае текстовых файлов – только для записи).

Внимание! Если файл с таким именем уже существует, он удаляется (его содержимое теряется), и создается новый пустой файл с данным именем.

Открытие существующего файла выполняет процедура

Эта процедура ищет уже существующий файл на диске и открывает его для работы, помещая указатель в начальную позицию. Если файл с установленным в Аssign именем не найден, возникает ошибка ввода/вывода, контроль которой зависит от директивы компилятора <$I>(смотрите здесь). После выполнения процедуры reset файл доступен как для записи, так и для чтения (в случае текстовых файлов – только для чтения).

Запись в файл производится процедурой

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

Примечание. Особенности выполнения операций записи и чтения для нетипизированных и текстовых файлов описаны в соответствующих разделах.

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

Функция FileSize(МуFilе) определяет число элементов в файле. Функция неприменима к текстовым файлам. Файл MyFyle должен быть открыт.

Функция логического типа ЕОF(МуFilе) имеет значение Тruе, если указатель указывает на маркер конца файла (End Of File).

Источник

While not eof f do begin что это

Общие алгоритмы работы следующие.

Работа с текстовыми файлами

1. Программа, которая читает текстовый файл proga 1. pas и выводит его на экран построчно. Файл proga1.pas должен существовать на диске в текущей папке (например, с исходным текстом данной программы).

VAR f : TEXT; s : STRING;

2. Та же программа, но с вывод текстового файла посимвольно.

VAR f : TEXT; c : CHAR;

WHILE Not EoLN(f) DO

3. Программа, которая читает из текстового файла Numbers.txt числа (в файле должны быть записаны только числовые константы и пробелы).

VAR f : TEXT; x : Real;

WHILE NOT SeekEOF(f) DO

4. Написать программу, которая копирует один текстовой файл в другой.

f 1, f 2 : text ; // входной и выходной файлы

while not EOF (f1) do

5. Усложним задачу. Необходимо сформировать новый (т.е. не существующий ранее) текстовый файл, а затем переписать из данного файла во второй только те строки, которые начинаются с буквы «А» или «а».

Пояснения: Задача разбивается на два этапа: первый – формирование первого файла; второй – чтение первого файла и формирование второго.

В завершении решения задачи – вывод на экран содержимого второго файла.

While not eof(f1) do

If (s[ 1 ]=’A’) or (s[ 1 ]=’a’) then

Writeln(‘Второй файл содержит строки:’);

While not eof(f2) do < пока не конец файла >

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

SA:Array [0..100] of String[100];

Write (‘введите имя файла для сортировки строк ’);

While Not EOF(Fil) Do

For I:=N Downto 1 Do

Работа с типизированными файлами

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

type typefile = file of byte;

while not EOF (f1) do

read (f1, c); write (f2, c)

8. Написать программу, которая заносит в файл FILE123 вещественные числа (случайные), выводит файл на экран, определяет размер файла и выводит содержимое случайно выбранного элемента

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

VAR f : FILE OF Real;

WRITELN(‘ Размер файла =’,

WRITELN (‘Запись номер ‘,

FilePos ( f ), ‘ содержит ‘, r :0:3);

Работа с бинарными (нетипизированными) файлами

(покажем варианты двух предыдущих программ, но с использованием бинарных типов файлов)

9. Вариант решения программы из примера №8 (укороченный)

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

Стандартная функция sizeof (переменная или тип) возвращает максимальный размер, занимаемый переменной или указанного в аргументе типа

WRITELN(‘ Размер файла =’,

WRITELN (‘Запись номер ‘, FilePos ( f ), ‘ содержит ‘, r :0:3);

10. Перепишем программу из примеров №4 и 7, посвященную копированию содержимого одного файла в другой (причем любого типа)

Чтение и запись в этом примере программы происходит блоками по 64000 байт, что может дать заметный выигрыш в скорости

X : array[1..64000] of byte;

Следующий пример посвящен записи в файлы таблиц (т.е.данных типа – запись разобранных в начале главы).

knigi:array[1..20] of Book;

writeln (‘ название год изд. наличие в библ’);

while writer=» do readln(writer);

if writer=’999′ then break;

while name=» do readln(name);

while bibl=» do readln(bibl);

write (‘С какого года нужны книги? ‘);

writeln (‘ название год изд. наличие в библ’);

repeat until keypressed;

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

Источник

Организация цикла чтения данных из файла

55 stroka в файле var f:text;
надо вывести данные в программу. Как это сделать через while not eof(f)?

попробовал через i:=1 to 100 do begin
readln(f,n);
if i=55 then write(n);
end;
Мы не знаем сколько строк в file, поэтому надо сделать через вайл или рипит, как сделать?

Организация записи в файл и чтения атрибутов файла
Доброго времени суток на циферблате Друзья понимаешь. КАК ОРГАНИЗОВАТЬ ЗАПИСЬ В ФАЙЛ И ЧТЕНИЕ.

Организация чтения из файла, адрес которой берется из переменной типа String
Доброго всем времени суток. Помогите решить следующую задачу. Организую чтение строк из файла.

while not eof f do begin что это. Смотреть фото while not eof f do begin что это. Смотреть картинку while not eof f do begin что это. Картинка про while not eof f do begin что это. Фото while not eof f do begin что этоНапишите функции записи данных в файл, чтения данных из файла
Файл dаte.in содержит четырех значное число на каждой строке. Напишите функции записи данных в.

Организация цикла без использования оператора цикла
Вычислить значение функции:F=система из 3-х уравнений. 1 ур-ие:2*a*Y, при Y>0..2.

Если же например тебе нужны последние 100 строк из текстового файла
Всего в файле строк неизвестно, read(n), но предположительно больше 500 к примеру
Тогда легче как читать данные? Не 100 же раз if= писать

Не получается, к примеру
Определяем через Вайл нот Еоф(Ф) ду inc(i) количество всего строк в файле?

ну, по заданию нужно создать именно текстовый файл var f:text;
создал, ввожу данные в текстовый файл через цикл, к примеру: Название Книги, Автор, Стоимость и Дату публикации
(Каждые данные на отдельный объект в отдельной строке)

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

Но есть ли процедуры у текстового файла, которая определяет всего количество строк в Файле?
Я пока пытаюсь так сделать

Решение

— подсчитываем количество строк
— reset
— читаем в никуда i-100 строк
— читаем куда нужно 100 последних строк

Да, и ещё. То, что по заданию файл текстовый, это вообще ничего не значит. Никто не запрещал работать с текстовым файлом как с типизированным файлом символов. Или религия преподаватель не позволяет? Ну и что из того, что в программе мы сами считаем, что файл типизированный? Он как был текстовым, так им и останется. Хотя, не советую. Вы с текстовым-то файлом со скрипом разбираетесь.

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

Источник

Лабораторная работа “Вывод текста из файла”

Текст задания звучит следующим образом: вывести на экран текст из файла text.txt. Это задание базируется на выполнении предыдущего – запись текста в файл. Вывод текста из файла на экран в Pascal/Delphi осуществляется с помощью двух процедур: readln() и writeln(). Рассмотрим подробное решение этой задачи. Лабораторная работа выполняется в Delphi 10.3 Rio.

Анализ задачи

На данном этапе предполагается, что у нас имеется файл text.txt, который содержит некоторое количество строк текста или же файл пуст. Наша задача сводится к следующим шагам:

Решение задачи

Создаем новое консольное приложение в Delphi. Как это сделать – смотри в предыдущей лабораторной работе.

Пишем следующий код:

Рассмотрим алгоритм решения этой задачи подробно:

1. Определяем переменные в разделе var

– это файловая переменная для работы с текстовым файлом

– это переменная для хранения строки, полученной из текстового файла в delphi

2. Ассоциируем файловую переменную с внешним файлом на диске:

Более подробно об этой процедуре – см. здесь.

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

Для открытия текстового файла в Pascal/Delphi могут использоваться три метода – Rewrite, Reset и Append. Однако, так как в тексте задачи указано, что необходимо читать данные из файла, то мы используем метод Reset(), который открывает файл, ассоциированный с переменной F для чтения/записи, не создавая заново и не затирая данные.

4. В цикле с предусловием while..do считываем строки из файла и выводим их на экран:

Для условия выхода из цикла мы использовали метод Eof():

Метод Eof() возвращает True (истину), если достигнут конец файл. Таким образом, наше условие выхода из цикла читается как “пока не достигнут конец файла“.

Цикл с постусловием repeat..until в этой задаче лучше не использовать, несмотря на то, что программа не выдаст при этом никаких ошибок. Дело в том, что, если использовать цикл с постусловием, то программа хотя бы один раз попытается считать строку из файла и, если файл окажется пустым, то на экран будет выведена пустая строка – программа сработает “вхолостую”.

5. Закрываем файл и ожидаем пока пользователь не нажмет Enter:

Улучшение программы

Несмотря на то, что программа будет работать, в представленном выше коде есть несколько “тонких” мест. Во-первых, это использование строковой константы (имени файла) непосредственно в коде программы, чего необходимо избегать, так как затрудняется внесение изменений в код программы, если таких констант у вас будет много. Во-вторых, если при запуске программы рядом с exe-файлом не будет обнаружен файл text.txt, то программа вызовет исключение при попытке открыть файл методом reset(). Текст ошибки при этом будет следующим:

—————————
Debugger Exception Notification
—————————
Project ReadTextFile.exe raised exception class EInOutError with message ‘File not found’.
—————————
Break Continue Help
—————————

Улучшим код нашей программы следующим образом:

В этом коде мы вынесли все строковые константы в секцию const, а в самом коде программы добавили условие:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *