Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Файлы.doc
Скачиваний:
42
Добавлен:
26.03.2015
Размер:
274.94 Кб
Скачать

Оператор Write

Этот оператор используется для передачи данных из элементов списка вывода в файл, присоединенный к заданному устройству.

Write ( [unit=]<номер устройства>,

[,fmt=<способ представления данных>]

[,end=<метка>]

[,err=<метка>]

[,iostat=<целочисленная переменная>]

[,rec=<целочисленное выражение>] ) <список вывода>

Все спецификаторы имеют тот же смысл, что и в операторе read.

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

Write(40, ’(f4.2)’) x – записывает значение x в форматный последовательный файл присоединенный к устройству 40

Это равнозначные операторы:

Write(6,’(f4.2)’) x = write(*,’(f4.2)’) x = print (’(f4.2)’) x

Пусть необходимо записать в последовательный форматный файл число 100.

Open(10, file=’res1.txt’)

Write(10, ’(i4)’) 100

!записывается число 100 в файл res.txt, связанный по каналу 10

Запись в файл происходит следующим образом:

  • Открывают файл (open);

  • Записывают данные (write)

  • Закрывают (close)

Оператор Close

При завершении работы с файлом его закрывают оператором Close(n). Этот оператор отсоединяет файл от устройства.

Close ( [unit=]<номер устройства>,

[,err=<метка>]

[,iostat=<целочисленная переменная>]

[,status=<символьное выражение>])

Оператор Backspace

Этот оператор устанавливает указатель (позиционирует файл) на одну запись назад. Используется только для последовательных файлов.

Backspace ( [unit=]<номер устройства>

[,err=<метка>]

[,iostat=<целочисленная переменная>]) )

Оператор Rewind

Этот оператор устанавливает указатель на начало файла.

Rewind (n) – или в другой форме:

Rewind ([unit=]<номер устройства>

[,err=<метка>]

[,iostat=<целочисленная переменная>]) )

Если файл не присоединен этот оператор не вызовет никаких действий. В CVF этот оператор можно использовать только для файлов последовательного доступа.

Оператор Endfile

В CVF используется только для последовательных файлов. Этот оператор записывает специальную запись ''конец файла''. Если файл был не открыт, то возникает ошибка. После успешного выполнения указатель устанавливается за этой записью. Теперь все записи после нее станут недоступны.

Endfile(n)

или

Endfile ([unit=]<номер устройства>,

[,err=<метка>]

[,iostat=<целочисленная переменная>])

Оператор Find

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

Find ( [unit=]<номер устройства>,

rec=<целочисленное выражение>

[,err=<метка>]

[,iostat=<целочисленная переменная>])

Функция Eof

Функция возвращает значение .True., если достигнут конец файла и значение .False. в противном случае.

Flag=Eof(n)

Используется в цикле для чтения или записи:

Do while (.not. eof (n)

..

enddo

Оператор Inquire (оператор запроса)

Оператор предназначен для получения информации о характеристиках и текущем состоянии указанного устройства или внешнего файла.

В этом операторе можно получить либо информацию об устройстве, либо информацию о файле

Inquire ([unit=]<номер устройства>,

[,err=<метка>]

[,iostat=<целочисленная переменная>])

Или

Inquire(

[file=]<файл>,

[,err=<метка>]

[,iostat=<целочисленная переменная>]

[, exist=<логическая переменная>]

[,nextrec=<целочисленная переменная>]

Нельзя одновременно получать информацию и о файле и об устройстве.

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

Параметр exist определяет существование указанного файла и принимает значение .true.,если файл существует, и значение .false.,если файла нет и он не может быть открыт. Тогда этот оператор должен размещаться до оператора open.

или

Inquire (file=]<файл>,

[,iostat=<целочисленная переменная>]

[, defaultfile=<спецификаторы>])

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

Если файл входной, то можно (желательно) написать процедуру проверки наличия файла (процедура control). Это надо сделать до оператора open.

subroutine control_1 ( s ) !проверка наличия файла

implicit none

character(*), intent(in)::s

logical f

inquire(file=s, exist= f)

if (f) then

print*, ‘файл существует'

else

stop 'создайте файл' !конец работы, если нет файла

endif

end subroutine

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

subroutine control_2 ( s )

implicit none

character(*),intent(in)::s

logical f

inquire(file=s, exist=f)

if (f) then

print*, ‘ файл успешно открыт’

open(1, file=s)

else

print*, ‘ файл открыт для добавления’

open(1, file=s, access=’append’)

endif

end subroutine

Запись и чтение данных при работе с файлом происходит с той позиции, где находится файловый указатель. Любая операция ввода/вывода в файле перемещает указатель в начало следующей записи. Если количество записей при чтении неизвестно, то используется логическая функция eof(n), которая осуществляет контроль достижения конца файла. Функция возвращает .TRUE., если достигнут конец файла, и .FALSE. в противном случае. При попытке прочесть несуществующую запись возникает ошибка.

При необходимости дописать данные в файл последовательного доступа в операторе open указывается accsess = append.

Если файл последовательного доступа прочитан весь и есть необходимость продолжить его обработку, то используют оператор REWIND(<номер устройства>).

Если файл прямого доступа прочитан весь и есть необходимость продолжить его обработку, то используют оператор перехода на любую запись Find(<номер записи>).

Соседние файлы в предмете Программирование на Pascal