Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Копирование текстовых файлов

Алгоритм решения задачи:

Копирование текстовых файлов с помощью средств языка Pascal реализовать достаточно просто. Копируемый файл открывается в режиме чтения (reset), а планируемая копия – в режиме записи (rewrite). И пока не будет достигнут конец первого файла (eof), считывать данные из одного и записывать их в другой. По окончании следует закрыть оба файла (close).

Программа на языке Паскаль:

var

f1, f2: text;

s: string;

begin

assign (f1, 'c:\file1.txt');

reset (f1);

assign (f2, 'c:\file2.txt');

rewrite (f2);

while not eof (f1) do begin

readln (f1, s);

writeln (f2, s)

end;

close (f1);

close (f2);

end.

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

var

f1, f2: text;

s: string;

name1, name2: string;

err: boolean;

begin

err := true;

while err = true do begin

write ('File name: ');

readln (name1);

assign (f1, name1);

{$I-}

reset (f1);

{$I+}

if IOResult = 0 then

err := false;

end;

write ('File name of copy: ');

readln (name2);

assign (f2, name2);

rewrite (f2);

while not eof (f1) do begin

readln (f1, s);

writeln (f2, s)

end;

close (f1);

close (f2);

end.

Фильтрация данных

Задача:

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

Алгоритм решения задачи:

Первый файл открывается на чтение, второй – на запись.

Первый цикл while читает поэлементно исходный файл. Если текущий символ является одним из ‘a’, ‘e’ или ‘u’, то он записывается во второй файл. Также переменная-счетчик (k) увеличивает свое значение на единицу.

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

Программа на языке Паскаль:

var f1, f2: file of char;

c: char;

k: integer;

begin assign (f1, 'c:\file1.txt');

reset (f1);

assign (f2, 'c:\file2.txt');

rewrite (f2);

k := 0;

while not eof (f1) do begin

read (f1, c);

if (c = 'a') or (c = 'e') or (c = 'u') then begin

write (f2, c);

k := k + 1

end

end;

close (f1);

close (f2);

reset (f2);

while not eof (f2) do begin

read (f2, c);

write (c:2)

end;

writeln;

writeln (k);

readln

end.

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

Задача:

Осуществить запись одинаковых данных в типизированные и текстовый файлы.

Сравнить размер файлов.

Описание переменных:

file_r, file_i, file_t – переменные связываемые с файлами для хранения действительных чисел, целых чисел и текста соответственно;

n – количество записываемых чисел;

a – текущее число.

Алгоритм решения задачи:

Сначала файловые переменные связываются с конкретными файлами на диске. Файлы открываются на запись. Если файлов не было, то они будут созданы.

У пользователя запрашивается количество вводимых чисел.

В цикле for считывается очередное число и записывается в три разных файла.

В конце файлы закрываются.

Программа на языке Паскаль:

var

file_r: file of real;

file_i: file of integer;

file_t: text;

i, n: integer;

a: integer;

begin

assign(file_r,'c:/rfile.txt');

assign(file_i,'c:/ifile.txt');

assign(file_t,'c:/tfile.txt');

rewrite(file_r);

rewrite(file_i);

rewrite(file_t);

write('n=');

readln(n);

for i:= 1 to n do begin

write('a=');

readln(a);

write(file_r,a);

write(file_i,a);

write(file_t,a);

end;

close(file_r);

close(file_i);

close(file_t);

readln

end

Примечания:

Размер типизированного файла из вещественных чисел всегда будет равен произведению количества записываемых чисел (n) и размеру памяти, отводимого под тип real (скорее всего 8 байт). Например, если записать в файл 5 чисел, то он будет равен 40 байтам.

Файл из целых чисел при тех же данных будет равен 10 байтам, если под каждое данное типа integer отводится 2 байта.

Размер текстового файла напрямую зависит от того, сколько символов-цифр было введено и не зависит от количества записываемых чисел. Так, если было введено 5 одноразрядных чисел, то файл будет равен 5 байтам, если же присутствовали два двухразрядных и три одноразрядных, то размер файла увеличится до 7 байт и т.д. (Под каждый символ выделяется 1 байт).