Мегаобучалка Главная | О нас | Обратная связь


Файлы последовательного доступа



2016-01-26 570 Обсуждений (0)
Файлы последовательного доступа 0.00 из 5.00 0 оценок




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

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

При работе с текстовыми файлами используется форматный или управляемый списком ввод-вывод. При вводе данные из символьной формы преобразуются в форму внутреннего представления соответствующего типа, при выводе происходит обратное преобразование: из внутренней в символьную. Все правила преобразования описаны в разделе 3.9 применительно к вводу с клавиатуры и выводу на экран. Для файлов, связанных с устройствами внешней памяти, они те же самые.

Записи в текстовом файле отделяются друг от друга неотображаемыми символами CHAR(13) – возврат каретки и CHAR(10) – новая строка. При выводе на экран или на печать каждая запись выделяется в отдельную строку. В файле последовательного доступа разные записи могут иметь различную длину.

Оператор чтения из текстового файла имеет вид

READ (N|*, fmt|*) список ввода

Здесь N – номер устройства, с которым связан файл. Звездочка на месте номера устройства означает ввод с клавиатуры. fmt – список дескрипторов формата или метка оператора FORMAT (подробно см. раздел 3.9). Звездочка вместо fmt обозначает ввод, управляемый списком ввода.

Оператор вывода в текстовый файл:

WRITE(N|*, fmt|*) список вывода

В последовательном файле после выполнения оператора WRITE выставляется код конца файла. Поэтому для последующего чтения из файла нужно либо выполнить оператор REWIND (возврат на начало) либо BACKSPASE (возврат на одну запись назад).

В операторах READ и WRITE можно употреблять опцию IOSTAT=целая_переменная, позволяющую фиксировать ошибки при выполнении оператора (см. эту опцию для оператора OPEN)

Пример 2.Далее приведена программа работы с текстовым файлом последовательного доступа.

integer(2):: ia, ib, d(4)=(/1,2,3,4/)

real(4) a,b

character(3) ca

1 FORMAT(6F7.2)

2 FORMAT(8I5)

3 FORMAT(7A4)

open(1,file=’a.txt’)!открыт последовательный текстовый !файл

write(1,1)1.1, 2.2 ! 1 запись:^^^1.10^^^2.20

write(1,2)d ! 2 запись:^^^^^^^1^^^^^^^2^^^^^^^3^^^^^^^4

write(1,3) `a`, `bc`, `def` ! 3-я запись:^^^^a^^^bc^^def

rewind 1 !переход на первую запись

read(1,1) a, b !чтение 1-й записи: a=1.1 b=2.2

read(1,2) ia, ia, ia !чтение из 2-й записи: ia=3

read(1,3) ca, ca ! чтение из 3-й записи: ca=`bc`

backspace 1 !переход к 3-й записи

backspace 1 !переход к 2-й записи

read(1,2) ib, ib !чтение из 2-й записи: ib=2

write(*,*) a, ia, ca, ib !вывод на экран: 1.1 3 bc 2

rewind 1 !переход к 1-й записи

read(1,*) !переход ко 2-й записи

write(1,3) `ghij` !переписывание 2-й записи: `ghij`

End

В результате выполнения программы в файле a.txt останутся 2 записи:

^^^1.10^^^2.20

ghij

 

Двоичные файлы последовательного доступа. При записи в двоичный файл происходит копирование содержимого ячеек оперативной памяти. При чтении из двоичного файла данные без изменения своей формы передаются в ячейки оперативной памяти. Записью в двоичном файле считается каждый байт. Поэтому выполнение оператора BACKSPACE приводит к перемещению файлового указателя на один байт назад. Оператор чтения из двоичного файла имеет вид

READ(N) список_ввода

При этом ФУ перемещается на количество байт, равных длине списка ввода. Оператор вывода в двоичный файл: WRITE(N) список_ вывода. ФУ перемещается на длину списка вывода и записывается код конца файла.

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

Файлы прямого доступа

Файлы прямого доступа могут быть форматными, двоичными, неформатными. Все записи в файле прямого доступа имеют одинаковую длину. Длина записи задается параметром RECL= в операторе открытия файла. Для открытия форматного файла прямого доступа в программе записывается оператор следующей структуры:

OPEN(N, FILE=fname, ACCESS=`DIRECT`, FORM=`FORMATTED`, RECL=recl)

Оператор открытия двоичного файла прямого доступа:

OPEN(N, FILE=fname, ACCESS=`DIRECT`, FORM=`BINARY`, RECL=recl)

Здесь recl – целое число, задающее длину записи.

По умолчанию файл прямого доступа имеет опцию FORM=`UNFORMATTED`.

В файле прямого доступа можно перейти на начало любой записи с номером r с помощью оператора read, в котором задан параметр REC=r-1. При этом список ввода может отсутствовать. В неформатном или двоичном файле оператор имеет вид

READ(N, [rec=r-1]) [список_ввода]

В форматном файле:

READ(N, frm, [rec=r-1]) [список_ввода]

Если список ввода отсутствует, то просто происходит установка ФУ на соответствующую запись. Если отсутствует параметр rec=, то читается текущая запись. Аналогично записывается оператор WRITE для двоичного или неформатного файла:

WRITE(N, [rec=r-1]) список_вывода

Для форматного файла:

WRITE(N, frm, [rec=r-1]) список_вывода

 

Пример. Имеется неформатный файл прямого доступа numbers.dat, содержащий 100 вещественных чисел типа real(8). Нужно занулить в файле все числа с четными номерами (2-е, 4-е и т.д.), а все числа с нечетными номерами переписать в форматный файл последовательного доступа massiv.txt.

Real(8):: nul=0

OPEN(1,FILE=`numbers.dat`,ACCESS=`DIRECT`, & FORM=`UNFORMATTED`, RECL=8)

Open(2, FILE=`massiv.txt`)

Do i=2,100,2

Write(1, rec=i-1) nul

Enddo

Rewind 1

Do i=1,99,2

Read(1, rec=i-1) nul

Write(2,*)nul

enddo

Упражнения

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

2. Даны два форматных последовательных файла, содержащие массивы целых чисел. Определить, являются ли они тождественными.

3. Дан двоичный файл последовательного доступа, содержащий элементы квадратной матрицы N*N, расположенные по строкам (вещественные числа типа REAL(8)). Заполнить двумерный массив числами из файла.

4. В текстовом файле последовательного доступа хранится текст книги. Размер строки – 80 символов, размер страницы – 50 строк. Определить номера страниц, на которых имеется слово FORTRAN.

5. В текстовом файле прямого доступа хранится текст книги. Размер строки – 80 символов, размер страницы – 50 строк. Везде, где содержится слово fortran, записанное строчными буквами, нужно заменить его на слово FORTRAN, записанное прописными буквами.



2016-01-26 570 Обсуждений (0)
Файлы последовательного доступа 0.00 из 5.00 0 оценок









Обсуждение в статье: Файлы последовательного доступа

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (570)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)