Часто в программах на паскаль необходимо загрузить начальную информацию из файла. Это активно используется в математических компьютерных расчётах, компьютерных играх и при работе с данными. Для того, чтобы считывать информацию из файла в программах паскаль, существуют удобные команды работы с файлами
На этом уроке мы разберём, как работать с файлами в pascal. Напишем простой пример, в котором программа считывает данные с одного файла и записывает в другой.
Считывание данных из файла в pascal
Для того, чтобы работать с файлами в pascal, необходимо создать переменную типа text.
var имя файловой переменной : text;
Пример
var f: text;
Далее необходимо связать конкретный файл с данной переменной, это делается с помощью команды
assign(имя файловой переменной,’адрес файла’);
Чтобы открыть файл, используется команда
reset (имя файловой переменной);
Пример
reset (f);
Для считывания из файла используется команда
Работа с файлами Pascal
readln (имя файловой переменной, переменная);
Пример
readln (f, a);
В конце работы с файлом, его необходимо закрыть командой
close(имя файловой переменной);
Пример
close(f);
Пример программы на паскаль, которая считывает информацию из файла и выводит её на экран
var f: text;
var a,b :integer;
begin
assign(f,’C:UsersUserDesktopdata.txt’);
reset (f);
readln (f, a);
readln(f,b);
writeln(a);
writeln(b);
close(f);
end.
Запись информации в файл на pascal
Результаты работы в программе на паскаль можно сохранять в файл и использовать их в дальнейшем.
Разберём пример записи значений двух переменных в файл.
Чтобы работать с файлами в pascal, нужно создать переменную типа text.
var имя файловой переменной : text;
Пример
var out: text;
После этого надо связать конкретный файл с данной переменной, для этого применим команду
assign(имя файловой переменной,’адрес файла’);
Чтобы открыть файл и вписать в него информацию, используется команда
rewrite(имя файловой переменной);
Пример
rewrite(out);
Чтобы вписать в файл информацию, применяется команда
writeln(имя файловой переменной,переменная);
После завершения работы с файлом, его необходимо закрыть командой
close(имя файловой переменной);
Пример
close(out);
Пример программы на паскаль, которая записывает в файл информацию
var out:text;
var a,b :integer;
begin
assign(out,’C:UsersUserDesktopout.txt’);
rewrite(out);
writeln(out,a);
writeln(out,b);
close(out);
end.
Полный код программы на pascal, которая считывает с файла информацию и записывает в другой
var f: text;
var out:text;
var a,b :integer;
begin
assign(f,’C:UsersUserDesktopdata.txt’);
reset (f);
readln (f, a);
Pascal — типизированные файлы
readln(f,b);
writeln(a);
writeln(b);
close(f);
assign(out,’C:UsersUserDesktopout.txt’);
rewrite(out);
writeln(out,a);
writeln(out,b);
close(out):
end.
Источник: itrobo.ru
Урок 10 — Файлы в Pascal
Немного позже мы разберемся с каждым из них. А сейчас рассмотрим основные операции для работы с файлами.
Создание файла
Процедура Assign связывает переменную файлового типа с физическим файлом. Например, установить соответствие между переменной Fil и текстовым файлом lot , расположенном на диске D , можно так:
Режим чтения
Процедура Reset открывает файл в режиме чтения, после чего оператором Read(, ) можно осуществить последовательное считывание элементов в программу.
Конец файла
Количество элементов в файле заранее не определяется, но часто необходимо знать о моменте достижения конца файла. Для этого в Паскале существует логическая функция EOF , которая проверяет достигнут ли конец, и если это так, то принимает значение True , иначе – False . Осуществляется проверка, как правило, в цикле, в качестве условного выражения выступает функция EOF .
Режим записи
Открыв файл в режиме записи, можно поэлементно записать в него информацию, воспользовавшись процедурой Write(, ) .
Закрытие файла
Close()
Процедура Close закрывает открытый файл, а также освобождает файловую переменную, указанную в качестве параметра.
Удаление файла
При помощи процедуры Erase , можно удалить с внешнего носителя, заранее закрытый файл.
Изменение имени файла
Rеnаmе переименовывает физический файл, который перед этим следует закрыть процедурой Close .
Смещение указателя файла
Процедура Sееk устанавливает позицию указателя в файле на необходимый элемент (нумерация элементов начинается с нуля).
Определение положения указателя
Функция FilePos принимает значение порядкового номера элемента, над которым в момент вызова находиться указатель.
Определение количества элементов
Функция FileSize определяет количество всех имеющихся в файле элементов.
2 Текстовые файлы
Текстовые файлы могут состоять из элементов символьного ( char ) и строкового ( string ) типа данных. Ключевое слово Text указывает, что файловая переменная создается для работы именно с текстовым файлом:
Структура текстового файла представляет собой последовательность строк, которые в свою очередь состоят из символов. Любая строка оканчивается признаком «конца строки», а сам файл признаком «конца файла». Для определения конца файла в Паскаль есть функция EOF , а для конца строки – EOLn :
В случае достижения конца строки она (функция EOLn ) возвращает значение True , в противном случае False .
Рассмотрим работу с текстовым файлом, на примере программы.
program text_fail; uses crt; var f: text; s: string; n, i: integer; begin assign (f, ‘file.txt’); rewrite(f); write(‘Количество строк ‘); read(n); for i:=1 to n do begin readln(s); writeln(f, s); end; clrscr; reset(f); while not eof(f) do begin readln(f, s); writeln(s); end; close(f); end.
Место создания файла «file.txt» не было указано, поэтому он создаться в папке по умолчанию для вашей среды программирования. Для текстовых файлов в Паскале определены следующие процедуры и функции:
Процедура Append открывает существующий файл в режиме дозаписи. После чего в его конец можно добавить какую либо информацию.
Если до конца строки остались пробелы/знаки табуляции, то функция SeekEOLn возвращает значение True , иначе False .
Если до конца файла остались лишь строки с пробелами/знаками табуляции, то функция SeekEOF возвращает значение True , иначе False .
3 Типизированные файлы
Файл, определенный стандартным или пользовательским типом данных, называется типизированным. Общая форма объявления типизированных файлов имеет вид:
Здесь тип компонент может быть любым типом данных, определенных в Pascal, но только не файловым. Для работы с типизированными файлами используются уже знакомые нам процедуры и функции: Write, Read, Seek, Filesize, Filepos , а также процедура Truncate :
Она удаляет все компоненты в файле, начиная с того над которым находиться указатель.
Одной из главных особенностей типизированного файла является возможность прямого обращения к его отдельным компонентам. Это достигается за счет, того что заранее известен тип компонент файла. Рассмотрим два примера кода, в первом из которых обращение к элементам файла происходит последовательно, а во втором прямо.
Пример: вычислить среднее арифметическое элементов файла.
program type_fail; uses crt; var f: file of integer; x, n, i: integer; sr: real; begin assign (f, ‘file.dat’); rewrite(f); write(‘Количество элементов ‘); read(n); for i:=1 to n do begin readln(x); write(f, x); end; clrscr; n:=0; reset(f); while not eof(f) do begin read(f, x); n:=n+x; end; sr:=n/filesize(f); close(f); write(‘Среднее арифметическое = ‘, sr); end.
Пример 2: поменять строки в файле местами.
program type_fail; uses crt; var f: file of string; i: integer; s, s1, s2, s3: string; begin assign (f, ‘file.dat’); s1:=’Pascal’; s2:=’ на ‘; s3:=’Программирование’; rewrite(f); write(f, s1, s2, s3); reset(f); write(‘Выводим как есть: ‘); while not eof(f) do begin read(f, s); write(s); end; writeln; write(‘Вывод после обработки: ‘); for i:=2 downto 0 do begin seek(f, i); read(f, s); write(s); end; close(f); end.
Таким образом, напрашивается вывод, что типизированные файлы несколько функциональней в обработке, чем текстовые. Далее разберем последний пункт данной статьи, а именно третий вид файлов — бестиповые файлы.
4 Бестиповые (нетипизированные) файлы
Бестиповые файлы предназначены для записи участков памяти компьютера на внешний носитель и считывания их в память. В отличие от типизированных файлов, нам не нужно знать информация какого типа хранится в них. А все потому, что данные из файлов, не имеющих типа, считываются в виде байт, после чего они «подстраиваются» под переменную, в которую происходит считывание.
Общая форма записи нетипизированных файлов
отличается от типизированных отсутствием части of . Кроме того, немного изменяется принцип действия процедур Reset и Rewrite . К ним прибавляется второй параметр типа Word:
reset(, ) rewrite(, )
Здесь «значение» — это новый размер буфера, который по умолчанию равен 128 байтам. В качестве минимального значения можно указать 1 байт, а максимального — 64 кбайт (число в байтах).
Также в бестиповых файлах для записи и чтения информации используются не стандартные процедуры Read и Write , а две новые: BlokRead и BlockWrite . Рассмотрим каждую из них.
Процедура BlockRead
Данная процедура считывает из файла заданное число записей, которые помещаются в память.
Общая форма записи:
x, y – обычные переменные, в первую помещается прочитанные данные, во вторую – количество считанных байт. В случае удачи y (y – необязательный параметр) будет иметь тоже значение, что и третий параметр.
Процедура BlockWrite
Для записи информации в бестиповый файл предназначена процедура BlockWrite :
Параметры процедуры BlockWrite точно такие же, как и у BlockRead . Да и принцип их одинаков, за исключением того, что первая записывает данные в файл, а вторая считывает их из него.
В следующей программе данные сначала записываются в нетипизированный файл, а затем выводятся из него посредством рассмотренных нами операций.
program no_type_fail; uses crt; var f: file; x, i ,n: byte; begin clrscr; assign(f, ‘f’); rewrite(f, 1); write(‘n = ‘); readln(n); for i:=1 to n do begin x:=n-i; blockwrite(f, x, 1); end; reset(f, 1); while not eof(f) do begin blockread(f, x, 1); write(x,’ ‘); end; close(f); readkey; end.
Возможно, что ваша среда программирования не поддерживает работу с файлами, не имеющими типа. Поэтому прежде чем начать искать ошибку в коде, стоит узнать про данную функцию.
Источник: pro-prof.com
Текстовые файлы в Pascal
Все предыдущие примеры программ на этом сайте выводили данные непосредственно на экран компьютера. Но данные можно выводить в файлы на внешние носители.
Рассмотрим пример программы на PascalABC, которая считывает исходные данные из внешнего файла. Считает сумму и произведение. Записывает результат тоже во внешний файл.
Но прежде немного справочной информации.
Текстовые файлы Паскаль
Файл — это упорядоченная последовательность однотипных компонентов, расположенных на внешнем носителе. Файлы предназначены только для хранения информации, а обработка этой информации осуществляется программами.
В Паскале для связи программы с файлом служит файловая переменная, которая обязательно должна быть указана в разделе описаний VAR.
f1,f2: text;
Текстовый файл в PascalABC — это совокупность строк произвольной длины, разделенных между собой маркерами конца строки, а весь файл заканчивается маркером — конец файла.
Текстовые файлы являются файлами с последовательным доступом. В любой момент времени доступна только одна запись файла. Другие записи становятся доступными лишь в результате последовательного продвижения по файлу.
Чтобы программа смогла различать записи данных в текстовом файле, их разделяют пробелами. Например, 20 30 45 озеро.
Перед использованием файловой переменной она должна быть связана с внешним файлом с помощью вызова процедуры Аssign.
assign(f1,’inp/input.txt’); assign(f2,’res/output.txt’);
Имя внешнего файла при необходимости должно содержать абсолютный путь доступа к этому файлу, включая имя дисковода. При этом имя внешнего файла – строковая величина, т.е. должна быть заключена в апострофы. В нашем примере путь к файлу относительный.
Наши файлы расположены в рабочем каталоге PascalABC (C:PABCWork).
Когда связь с внешним файлом установлена, для подготовки ее к операции ввода или вывода файловая переменная должна быть “открыта”. Существующий файл можно открыть с помощью процедуры Reset, а новый файл можно создать и открыть с помощью процедуры Rewrite. Текстовые файлы, открытые с помощью процедуры Reset доступны только по чтению, а текстовые файлы, открытые с помощью процедуры Rewrite, доступны только по записи.
reset(f1); rewrite(f2);
Для текстовых файлов существует специальный вид операций чтения и записи (read и write), который позволяют вам считывать и записывать значения, тип которых отличается от символьного типа. Такие значения автоматически переводятся в символьное представление и обратно. Например, Read(f,i), где i — переменная целого типа, приведет к считыванию последовательности цифр, интерпретации этой последовательности, как десятичного числа, и сохранению его в i.
В нашей программе это строка ниже:
read(f1,x,y,k);
Источник: infouch.ru