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) записывать строки в файл. Пора соединить все это: читая строки исходного файла, будем шифровать их, и записывать в другой файл, – так будет работать наша программа.
Прежде всего договоримся об именах файлов. Назначив зашифрованному файлу постоянное имя, например «CRYPT.TXT», мы избавим себя от ввода его имени с клавиатуры. Вводить мы будем либо имя исходного файла – при шифровании, либо имя конечного файла – при расшифровке. Обозначим эти неизвестные нам имена файлов как X1 и X2, и тогда схема обработки файлов будет такой.
Рис. 57 – Схема именования файлов при шифровании и расшифровке
С учетом этих договоренностей составим блок-схему программы (рис. 58).
Рис.58 – Блок-схема программы шифрования/расшифровки
Основную работу поручим процедуре шифрования-расшифровки, блок-схема которой показана на рис. 59. В неё передаём два параметра: имя обрабатываемого файла и код операции (зашифровать или расшифровать).
Рис.59 – Блок-схема процедуры шифрования-расшифровки
Теперь мы готовы смастерить шпионскую программу. Может быть, сами справитесь? По крайней мере, попытайтесь. Функции и процедуры шифрования символов и строк возьмите из программы «P_24_1». Написав свой вариант, сравните с представленным ниже.
{ P_26_2 – шифрование и расшифровка файлов }
const CKey = 2; { Ключ Цезаря }
{ Шифрование одного символа }
function Encrypt(arg: char): char;
var x: integer;
begin
Encrypt:=arg;
if Ord(arg)>=32 then begin { управляющие символы не трогаем! }
x:= Ord(arg)+ CKey;
if x>255 then x:= x-256+32;
Encrypt:= Char(x);
end;
end;
{ Расшифровка одного символа }
function Decrypt(arg: char): char;
var x: integer;
begin
Decrypt:=arg;
if Ord(arg)>=32 then begin { управляющие символы не трогаем! }
x:= Ord(arg)- CKey;
if x<32 then x:= x+256-32;
Decrypt:= Char(x);
end;
end;
{ Шифрование строки }
procedure EncryptStr(var arg: string);
Читать дальше