Песни о Паскале - [46]

Шрифт
Интервал

>      Readln;       { ждем нажатия Enter }

>end.


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

Итоги

• Текстовые файлы содержат строки видимых символов, отделенные друг от друга невидимыми на экране управляющими кодами CR (возврат каретки) и LF (перевод строки).

• К текстовым файлам обращаются через файловые переменные типа TEXT.

• Перед чтением файла нужны два шага: 1) связывание файловой переменной с именем файла процедурой Assign, и 2) открытие файла для чтения процедурой Reset.

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

• После открытия файла его чтение начинается с первой строки; каждый вызов процедуры Readln смещает позицию чтения в начало следующей строки.

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

• Чтобы узнать о достижении конца файла, вызывают функцию Eof, которая возвращает TRUE, если достигнут конец файла.

• Признак окончания файла исследуют в начале цикла, и для этого лучше подходит оператор цикла WHILE-DO.

• По окончании работы с файлом его закрывают процедурой Close.

А слабо?

А) Можно ли связать текстовую переменную F с файлом оператором присваивания?


>      F := ’c:\autoexec.bat’;


Б) Напишите программу для вывода на экран файла, имя которого задается с клавиатуры.

В) Напишите три функции для подсчета:

• строк в файле;

• видимых символов в файле;

• всех символов файла (фактический объём файла).

Функции принимают один параметр – ссылку на файловую переменную. Напишите программу, определяющую упомянутые характеристики файла.

Г) Объявите две файловые переменные, свяжите их с одним и тем же файлом, а затем откройте через обе переменные. Вызовет ли это ошибку? Объясните результат, исходя из здравого смысла.

Д) Усовершенствуйте программу «вопрос-ответ» (глава 16) с тем, чтобы ответы хранились не в программе, а в отдельном текстовом файле. Тогда пользователи программы сами смогут сочинять ответы.

Е) Напишите процедуру для вывода на экран N–й строки файла, где N – параметр процедуры. Воспользовавшись этой процедурой, напишите программу для распечатки строк файла в обратном порядке. Подсказка: предварительно посчитайте количество строк в файле.

Глава 26

Я не читатель, – я писатель!



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

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

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

• для доступа к файлу используют файловую переменную типа TEXT;

• файловую переменную надо связать с файлом процедурой Assign;

• по окончании записи файл закрывают процедурой Close.

Вот схема, где отражены четыре этапа записи в файл (рис. 56).



Рис.56 – Четыре этапа записи в файл

Как видите, запись в файл отличается от чтения вторым и третьим этапами, ими и займемся.

Итак, после привязки файла процедурой Assign, файл открывают для записи процедурой Rewrite – «перезапись».


>      Rewrite(F);


Тут находим первое отличие: если для чтения требуемый файл должен существовать, то для записи этого не нужно. Если файла ещё нет, будет создан новый пустой файл. А при наличии файла он будет очищен, и вся информация в нём сотрется, как мел с доски. Будьте внимательны, иначе лишитесь нужной информации!

В открытый таким образом файл можно «печатать» нужные нам строки. Как? Вы уже знаете – процедурой Writeln. А что указать первым параметром? Правильно, – файловую переменную, вот так:


>      Writeln(F, S); { F – переменная типа TEXT, S – строковая }


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

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

Пример записи в файл

Рассмотрим небольшой пример: заполнение файла числами от 1 до 10.


>{ P_26_1 }

>var F: text;       { файловая переменная }

>      k: integer;

>begin

>      Assign(F, 'P_26_1.txt'); { назначаем имя файла }

>      Rewrite(F);       { открываем файл для записи }

>      for k:=1 to 10 do       { записать 10 строк с числами }

>      Writeln(F, k);

>      Close(F);       { закрываем файл }

>end.


Есть вопросы? Запустите программу и проверьте, работает ли она. Запустили? Теперь отыщите в папке с программой файл «P_26_1.TXT» и откройте его любым редактором. Уверен, что вы обнаружите в нём столбик из десяти чисел.

Завершение шпионского проекта

Подойдя к финалу нашего проекта, мы научились: 1) шифровать отдельную строку, 2) читать строки из файла и 3) записывать строки в файл. Пора соединить все это: читая строки исходного файла, будем шифровать их, и записывать в другой файл, – так будет работать наша программа.


Рекомендуем почитать
Когда цветет ликорис

Что делать, если проснулась в морге и понятия не имеешь, как могла в нем оказаться? Но страшно даже не это. Что делать, когда память подвела настолько, что неясно даже - кто ты?! В голове остались лишь странные имена, а ночью снятся слишком реальные сны. А потом... черт, да как же я могла такое забыть?! Я же ведьма!!! И у меня любовь с оборотнем, которого еще спасти надо. А заодно и целое королевство, иначе им завладеет беспощадный злодей. Вот только, это совсем другой мир... Хорошо, что ликорис уже зацвел!


Послание в бутылке. Стихи

Данная книга содержит избранные произведения поэтессы за период 2007—2016 гг. Это философская, любовная, пейзажная лирика, проникнутая трепетным отношением к природе, восхищением красотой человеческой души.


Путешествие за счастьем

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


Покрывало тьмы

Юмористическое фэнтези. История красавицы и чудовища на новый лад.


Демон и охотник

Знала ли юная Марианна, что кошмарные сны - это часть воспоминаний далекого прошлого. Прошлого, которое предстоит разгадать нашей героине. Ведь неизвестно как, девушка попала совсем другой мир, где сплошь и рядом те, кто не желает ей добра. И, как в сказках, к ней приходит на помощь.... Нет, не прекрасный принц на белом коне, а парень с маской на лице и выразительными изумрудными глазами. Что же ждет нашу героиню в этом мире? Сможет она узнать свое прошлое и принять его или же попытается от него убежать, ведь по пятам идет охотник....


Хранители: Город Сновидений

Шестнадцатилетняя девочка Энни, через книгу, попадает в город Сновидений, в котором происходит невероятная магия Луны. Там она узнает, что относится к необыкновенному роду людей – хранителям, которые защищают и помогают людям. Чтобы вернуться домой ей нужно найти лунный цветок расцветающий раз в сто лет, и который может исполнить любое, но одно желание.