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

Запись табличных данных в файл и их чтение оттуда

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

const

K = 10;

L = 20;

var

f: text;

n: byte;

i, j: integer;

begin

assign (f, 'c:\tabl.txt');

rewrite (f);

randomize;

for i := 1 to K do begin

for j :=1 to L do begin

n := random (100);

write (f, n:4)

end;

writeln (f)

end;

close (f);

{------------------------------------}

reset (f);

while not eof (f) do begin

while not eoln (f) do begin

read (f, n);

write (n:4)

end;

readln (f);

writeln;

end;

close (f)

end.

Примечания:

Таблица представляет собой двумерный массив – матрицу. Многие данные хранятся именно в виде двумерной таблицы.

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

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

При чтении данных из файла внутренний цикл while читает содержимое каждой строки. Завершение строки текстового файла определяется функцией eoln. Во внешнем цикле while выражение readln (f) переводит файловый указатель на новую строку с тем, чтобы последующее чтение началось именно оттуда.

Копирование нетипизированного файла

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

var

f1, f2: file;

cursor, size, part: longint;

s: string;

begin

assign (f1, 'c:\_msi.pyd');

reset (f1, 1);

assign (f2, 'c:\msi2.pyd');

rewrite (f2, 1);

cursor := 0;

part := 256;

size := filesize (f1);

while not eof (f1) do begin

blockread (f1, s, part);

blockwrite (f2, s, part);

inc (cursor, part);

if (cursor + part) > size then

part := size - cursor

end;

close (f1);

close (f2);

end.

Примечания:

Переменные, связываемые в дальнейшем с нетипизированными файлами, объявляются с помощью слова file.

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

Файл считывается блоками записей. В примере – это 256 блоков за раз. Переменная s хранит произведение размера записи на количество блоков.

При работе с нетипизированными файлами более эффективными являются процедуры blockread и blockwrite по сравнению с read и write.

Копирование данных в обратном порядке

Задача:

Требуется скопировать данные из одного файла в другой, но в обратном порядке.

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

Возможно, есть более простое решение, но в данном случае был использован массив.

Сначала данные считываются из исходного файла и заносятся в массив.

Количество элементов в массиве равно значению переменной k.

Из массива символы «читаются» в обратном порядке и последовательно записываются во второй файл.

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

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

Var f1, f2: file of char;

c: char;

arr: array [1..100] of char;

k, i: integer;

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

k := 1;

while not eof (f1) do begin

read (f1, c);

arr[k] := c;

write (c:2);

k := k + 1

end;

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

rewrite (f2);

for i := k-1 downto 1 do begin

write (f2, arr[i])

end;

close (f1);

close (f2);

reset (f2);

writeln;

while not eof (f2) do begin

read (f2, c);

write (c:2)

end;

readln

end.