Главная страница
Навигация по странице:

  • 11.7. Оператор ACCEPT

  • 11.9. Оператор DELETE

  • 11.10. Оператор UNLOCK

  • 11.11. Оператор WRITE

  • 11.12. Оператор PRINT

  • 11.13. Оператор REWRITE

  • 11.14. Оператор INQUIRE

  • современный фортран , Бортеньев. О. В. Бартеньев Современный Фортран


    Скачать 2.24 Mb.
    НазваниеО. В. Бартеньев Современный Фортран
    Анкорсовременный фортран , Бортеньев.pdf
    Дата28.05.2018
    Размер2.24 Mb.
    Формат файлаpdf
    Имя файласовременный фортран , Бортеньев.pdf
    ТипДокументы
    #19729
    страница40 из 49
    1   ...   36   37   38   39   40   41   42   43   ...   49

    362

    11. Операции над внешними файлами
    nml - спецификатор именованного списка. При вводе именованного списка iolist должен быть опущен. Управляемый именованным списком ввод может быть выполнен только из текстовых файлов, открытых для последовательного доступа.
    advance - символьное выражение, позволяющее задать продвигающийся или непродвигающийся последовательный форматный ввод и вычисляемое со значениями 'YES' или 'NO'. Значение 'YES' задается по умолчанию и означает, что задан продвигающийся ввод, т. е. после выполнения каждого оператора ввода файл позиционируется вслед за записью, из которой выполнялась передача данных. При непродвигающемся В/В (ADVANCE =
    = 'NO') файл оставляется сразу за последним переданным символом.
    end - метка исполняемого оператора того же блока видимости, где применен оператор READ. Если спецификатор ENDприсутствует, то при достижении конца файла управление передается на исполняемый оператор, метка которого end. Внешний файл устанавливается за записью "конец файла". Если ENDотсутствует и не заданы спецификаторы ERR или IO-
    STAT, то чтение после записи "конец файла" приведет к ошибке выполнения.
    eor - метка оператора того же блока видимости, в котором размещен оператор READ. Если спецификатор EOR= задан, то также должен быть задан и спецификатор ADVANCE='NO'. Если спецификатор EOR= задан, выполнение оператора ввода прекращается при достижении конца записи
    (если ранее не было иной ошибки). Если EOR= опущен, то при достижении конца записи возникает ошибка, которую можно обработать спецификатором IOSTAT.
    err - метка исполняемого оператора. При возникновении ошибки
    В/В управление передается на оператор, имеющий метку err.
    iostat - целочисленная переменная, возвращает 0 при отсутствии ошибок; возвращает -1, если возникла ситуация "конец файла"; в противном случае возвращает номер возникшей ошибки. Состояние ошибки возникает, например, если обнаружен конец записи при непродвигающемся вводе.
    rec - целочисленное выражение, возвращающее положительное число, называемое номером записи. Спецификатор REC может быть задан только при работе с файлами прямого доступа (иначе возникнет ошибка В/В). Если
    RECзадан, то до ввода данных файл позиционируется на начало записи с номером rec, что обеспечивает передачу данных из этой записи. Первая запись файла имеет номер 1. В FPS по умолчанию значение rec равно номеру текущей записи файла. И если при вводе из прямого файла параметр отсутствует, то будет введена текущая запись файла. В CVF при работе с прямыми файлами наличие спецификатора REC обязательно.
    size - целочисленная переменная стандартного целого типа, возвращающая число переданных при выполнении форматного ввода полей с данными. Добавляемые в результате выполнения спецификатора
    363

    О. В. Бартеньев. Современный ФОРТРАН
    PAD = 'YES' пробелы не засчитываются. Спецификатор SIZE= может быть задан только при задании спецификатора ADVANCE = 'NO'. Например: integer i, isv real a(10) open(1, file = 'a.txt') do i = 1, 5 read(1, '(f5.1)', advance = 'no', size = isv) a(i) end do print *, isv
    ! 5 end
    Файл a.txt:
    1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
    iolist - список ввода, содержащий переменные, значения которых должны быть переданы из файла. Элементами списка ввода могут быть как объекты любых типов, включая и производный, так и их подобъекты.
    Если при вводе возникает ошибка, то выполнение оператора прекращается, все элементы списка ввода становятся неопределенными, а положение файла непредсказуемым.
    Оператор READ может нарушить выполнение некоторых графических текстовых процедур, например SETTEXTWINDOW, которая изменяет текущую позицию курсора. Чтобы этого избежать, можно в графическом режиме выполнять ввод с клавиатуры, используя функцию GETCHARQQ, и выводить результаты на экран посредством процедуры OUTTEXT.
    11.7. Оператор ACCEPT
    Выполняет ввод данных с клавиатуры.
    ACCEPT fmt [, iolist] !
    Форматный ввод
    ACCEPT * [, iolist] !
    Ввод под управлением списка
    ACCEPT nml !
    Ввод под управлением именованного списка
    fmt - спецификатор формата, задаваемый без спецификатора FMT.
    iolist - список ввода.
    nml - спецификатор именованного списка.
    Пример: real x integer k print *, 'Enter real x and integer k' accept *, x, k
    ! Введем: 123.45 56 print '(f7.2, i5)', x, k
    ! 123.45 56 end
    364

    11. Операции над внешними файлами
    11.8. Оператор FIND
    Оператор устанавливает прямой файл на запись rec и заносит в ассоциируемую переменную файла номер rec. Имеет две формы:
    FIND([UNIT =] u, REC = rec [, ERR = err] [, IOSTAT = iostat]) и
    FIND(u'rec [, ERR = err] [, IOSTAT = ios])
    Описание спецификаторов см. в разд. 11.6.
    11.9. Оператор DELETE
    Удаляет запись rec в связанном файле.
    DELETE([UNIT =] u [, REC = rec] [, ERR = err] [, IOSTAT = iostat])
    Описание спецификаторов см. в разд. 11.6.
    Оператор логически удаляет заданную запись из файла, помечая ее как удаленную, и освобождает эту запись для занесения новых данных.
    При удалении записи, если не возникло ситуации ошибки, ассоциируемая переменная файла получает значение rec + 1. Если спецификатор REC не задан, то удаляется текущая запись.
    Пример для FIND и DELETE: integer(4) ios, asv
    ! asv - ассоциируемая переменная character(8) :: st = 'A record'
    ! Создадим прямой файл с тремя записями open(1, file = 'c.dat', access = 'direct', form = 'formatted', recl = 9,& status = 'new', associatevariable = asv,organization = 'relative') write(1, '(a8)', rec = 1) st; write(1, '(a8)', rec = 2) st; write(1, '(a8)', rec = 3) st find(1, rec = 2)
    ! или: find(1'2) print *, asv
    ! 2 delete(1, rec = 2) print *, asv
    ! 3 read(1, rec = 2, iostat = ios) st if(ios /= 0) then print *, 'Error' else print *, st
    ! Напечатает пустую строку end if end
    11.10. Оператор UNLOCK
    Освобождает запись в связанном файле или в файле с последовательной организацией, заблокированную предшествующим оператором READ.
    Имеет две формы:
    UNLOCK u
    365

    О. В. Бартеньев. Современный ФОРТРАН
    и
    UNLOCK([UNIT =] u [, ERR = label] [, IOSTAT = iostat])
    Описание спецификаторов см. в разд. 11.6.
    Если нет заблокированной записи, оператор игнорируется.
    11.11. Оператор WRITE
    Оператор передает данные из списка вывода в файл, подсоединенный к устройству u. В CVF в случае прямого файла изменяет ассоциируемую переменную файла, указанную в соответствующем операторе OPEN.
    WRITE([UNIT =] u [, [[FMT =] fmt] | [[NML =] nml] &
    [, ADVANCE = advance] [, ERR = err] &
    [, IOSTAT = iostat] [, REC = rec]) [iolist]
    u - устройство В/В (разд. 10.2 и 10.3). Вывод будет выполняться на экран, если в качестве устройства использована звездочка (*).
    Если устройство не было подсоединено к файлу, то при выводе будут выполнены действия, задаваемые оператором:
    OPEN(u, FILE = ' ', STATUS = 'UNKNOWN',
    &
    ACCESS = 'SEQUENTIAL', FORM = form) где form вычисляется со значениями 'FORMATTED' (при форматном вводе) и 'UNFORMATTED' (при неформатном). Если имя файла включено в запускающую программу командную строку, то это имя будет использовано для имени файла. В противном случае программа попросит ввести имя файла с клавиатуры.
    fmt - спецификатор формата. При неформатном или двоичном вводе параметр fmt должен быть опущен. Вывод будет управляться списком, если в качестве fmt использована звездочка. Управляемый списком вывод возможен только в последовательные текстовые файлы.
    nml - спецификатор именованного списка. При выводе именованного списка iolist должен быть опущен. Управляемый именованным списком вывод может быть выполнен только в файлы, открытые для последовательного доступа.
    advance - символьное выражение, позволяющее задать продвигающийся или непродвигающийся последовательный форматный вывод и вычисляемое со значениями 'YES' или 'NO'. Значение 'YES' задается по умолчанию и означает, что задан продвигающийся вывод, т. е. после выполнения каждого оператора вывода проставляются символы конца записи и файл позиционируется вслед за проставленными символами. При непродвигающемся В/В (ADVANCE='NO') символы конца записи не проставляются и файл оставляется вслед за последним выведенным символом.
    366

    11. Операции над внешними файлами
    err - метка исполняемого оператора. При возникновении ошибки
    В/В управление передается на оператор, имеющий метку err.
    iostat - целочисленная переменная, возвращающая 0 при отсутствии ошибок или номер возникшей ошибки.
    rec - целочисленное выражение, возвращающее положительное число, называемое номером записи. Параметр rec может быть задан только при работе с файлами прямого доступа (иначе возникнет ошибка В/В).
    Параметр rec указывает на запись, в которую будут переданы данные при выполнении оператора WRITE. В FPS по умолчанию значение rec равно номеру текущей записи файла. И если при вводе из прямого файла параметр отсутствует, то будет изменена текущая запись файла. В CVF при работе с прямыми файлами наличие спецификатора REC обязательно.
    iolist - список вывода, содержащий выражения, результаты которых должны быть переданы в файл.
    При записи в последовательный файл все записи, расположенные после введенной, удаляются (при наличии таковых) и файл позиционируется перед записью "конец файла". Таким образом, после вывода в последовательный файл необходимо применить BACKSPACE или REWIND для выполнения оператора READ. Препятствий для применения оператора
    WRITE, однако, нет.
    11.12. Оператор PRINT
    Выводит данные на экран (устройство *).
    PRINT * | fmt [, iolist] где fmt - спецификатор формата; iolist - список вывода. Если звездочка замещает fmt, то вывод управляется списком iolist.
    11.13. Оператор REWRITE
    Замещает в файле прямого доступа текущую запись на новую. В случае прямого файла изменяет ассоциируемую переменную файла, указанную в соответствующем операторе OPEN. При выводе в форматный файл имеет вид:
    REWRITE([UNIT =] u, [FMT =] fmt [, IOSTAT = iostat] &
    [, ERR = err]) [iolist]
    С неформатными файлами употребляется так:
    REWRITE([UNIT =] u [, IOSTAT = iostat] [, ERR = err]) [iolist]
    Спецификаторы имеют тот же смысл, что и в операторе WRITE.
    Текущей является запись, на которую установился файл в результате выполнения предшествующего оператора READ. Причем с устройством
    u между READ и REWRITE не должны выполняться другие операторы В/В,
    367

    О. В. Бартеньев. Современный ФОРТРАН
    кроме INQUIRE. В противном случае текущая запись окажется неопределенной.
    Число символов в списке вывода и задаваемых спецификатором формата не должно превышать длины записи, определяемой спецификатором RECL оператора OPEN. Если же число передаваемых символов меньше длины записи, то недостающие символы восполняются пробелами.
    Пример: type person character(len = 15) lastn, firstn end type person integer ios
    100 format(2a15) open(3, file = 'a.txt', form = 'formatted', access = 'direct', recl = 30)
    ! Создадим две записи write(3, fmt = 100, rec = 1) person('Blake', 'William') write(3, fmt = 100, rec = 2) person('Maugham', 'W. Somerset') read(3, fmt = 100, rec = 1)
    ! Текущей является запись 1 rewrite(3, 100, iostat = ios) person('Byron', 'G. Gordon') if(ios /= 0) print *, ' Rewriting error' end
    11.14. Оператор INQUIRE
    Возвращает свойства устройства или внешнего файла.
    Форма оператора опроса файла:
    INQUIRE(FILE = file [, ERR = err] [, IOSTAT = iostat] &
    [, DEFAULTFILE = def], slist)
    Форма оператора опроса устройства:
    INQUIRE([UNIT =] u [, ERR = err] [, IOSTAT = iostat], slist)
    Форма оператора опроса списка вывода:
    INQUIRE(IOLENGTH = iolength) [iolist]
    file - символьное выражение, задающее имя файла, информацию о котором возвращает оператор INQUIRE.
    u - устройство внешнего файла (разд. 10.2), о котором необходимо получить информацию. Если задано UNIT = *, то нельзя включать спецификатор NUMBER.
    В операторе INQUIRE можно задать либо параметр u, либо file, но не одновременно и то и другое. Если задан параметр u, то выполняется опрос устройства. Если задан file, то выполняется опрос файла.
    def - скалярное символьное выражение, задающее используемый по умолчанию путь к открываемому файлу. Если завершающий слеш (/) опущен, то он будет добавлен. Если спецификатор DEFAULTFILE отсутствует, то используется текущая рабочая директория.
    368

    11. Операции над внешними файлами
    Если в INQUIRE присутствует спецификатор DEFAULTFILE, то он должен быть и в соответствующем операторе OPEN. Спецификатор DE-
    FAULTFILE = def может быть задан в дополнение или вместо спецификатора FILE = file. И file и def могут начинаться с тильды (

    ).
    iolength - переменная стандартного целого типа, возвращающая размер списка вывода. Эта форма оператора INQUIRE включает только спецификатор IOLENGTH= и список вывода iolist. Все другие спецификаторы должны отсутствовать. Список iolist во всех других случаях отсутствует. Например: real :: r = 1.1, a(100) = 2.2 integer :: iol, kar(50) = 5 character(25) :: st(25) = 'abcd' inquire(iolength = iol) r, a, kar, st
    ! iol - размер списка вывода print *, iol
    ! 1229
    Полученное значение можно использовать, например, для задания спецификатора RECL оператора OPEN. Затем данные можно передать в открытый неформатный файл прямого доступа.
    slist - один или более спецификаторов из следующего списка:
    [, ACCESS = access] [, ACTION = action] [, BINARY = binary] &
    [, BLANK = blank] [, BLOCKSIZE = blocksize] &
    [, BUFFERD = bf*] [, CARRIAGECONTROL = carriagecontrol] &
    [, CONVERT = fm*] [, DELIM = delim] [, DIRECT = direct] &
    [, ERR = err] [, EXIST = exist] [, FORM = form] &
    [, FORMATTED = formatted] [, IOFOCUS = iofocus] &
    [, IOSTAT = iostat] [, MODE = mode] [, NAME = name] &
    [, NAMED = named] [, NEXTREC = nextrec] [, NUMBER = num] &
    [, OPENED = opened] [, ORGANIZATION = org*] [, PAD = pad] &
    [, POSITION = position] [, READ = read] [, READWRITE = readwrite] &
    [, RECL = recl] [, RECORDTYPE = rtyp*] [, SEQUENTIAL = seq] &
    [, SHARE = share] [, UNFORMATTED = unformatted] [, WRITE = write])
    Замечание. Отмеченные звездочкой параметры применимы только в CVF.
    access - символьная переменная. Возвращает 'APPEND', если заданное устройство или файл открыты для добавления данных. Возвращает 'SE-
    QUENTIAL', если устройство или файл открыты для последовательного доступа, и возвращает 'DIRECT', если устройство или файл открыты для прямого доступа.
    Возвращает 'UNDEFINED' при отсутствии подсоединения.
    action - символьная переменная, возвращающая 'READ', если файл открыт только для чтения, или 'WRITE', если файл открыт только для записи, или 'READWRITE', если файл подсоединен как для чтения, так и для записи. Возвращает 'UNDEFINED' при отсутствии подсоединения.
    369

    О. В. Бартеньев. Современный ФОРТРАН
    binary - символьная переменная. Возвращает 'YES', если файл или устройство опознаны как двоичные, и 'NO' или 'UNKNOWN' - в противном случае.
    blank - символьная переменная. Возвращает 'NULL', если действует дескриптор преобразования BN, и возвращает 'ZERO', если действует дескриптор BZ. Возвращает 'UNDEFINED' при отсутствии подсоединения или если файл открыт не для форматного В/В.
    blocksize - переменная стандартного целого типа. Возвращает размер буфера В/В в байтах. Возвращает 0 при отсутствии подсоединения.
    bf - символьная переменная. Возвращает 'YES' ('NO'), если файл или устройство подсоединены и действует (не действует) буферизация, или 'UN-
    KNOWN', если файл или устройство не подсоединены.
    carriagecontrol - символьная переменная, возвращающая 'FORTRAN', если первый символ форматной записи трактуется как символ управления кареткой, или 'LIST', если первый символ форматных файлов ничем не отличается от других символов записи.
    delim - символьная переменная, возвращающая 'APOSTROPHE', если для символьных данных при управляемом списком В/В в качестве ограничителя используется апостроф ('). Возвращает 'QUOTE', если ограничителями являются кавычки ("). Возвращает 'NONE', если ограничитель не задан.
    Возвращает 'UNDEFINED' при отсутствии подсоединения.
    direct - символьная переменная. Возвращает 'YES', если опрашиваемое устройство или файл открыты для прямого доступа, и возвращает 'NO' или 'UNKNOWN' в противном случае.
    err - метка исполняемого оператора. При возникновении ошибки управление передается на оператор, имеющий метку err.
    exist - логическая переменная; возвращает .TRUE., если опрашиваемое устройство или файл существует, или .FALSE. - в противном случае.
    fm - символьная переменная. Возвращает одно из перечисленных в разд. 11.4 для спецификатора CONVERT значений, или 'UNKNOWN', если файл или устройство не подсоединены для неформатной передачи данных.
    form - символьная переменная. Возвращает 'FORMATTED', если устройство или файл подсоединены для форматного В/В; возвращает 'UN-
    FORMATTED' при неформатном В/В и возвращает 'BINARY' при двоичном
    В/В. Возвращает 'UNDEFINED' при отсутствии подсоединения.
    formatted - символьная переменная. Возвращает 'YES', если устройство или файл открыты для форматного В/В, и 'NO' - в противном случае.
    Возвращает 'UNKNOWN', если процессор не может определить, какой В/В разрешен.
    iofocus - переменная стандартного логического типа. Возвращает
    .TRUE., если заданное устройство (окно приложения QuickWin) находится в фокусе, в противном случае возвращает .FALSE.. Параметр может быть использован только с QuickWin-приложениями.
    1   ...   36   37   38   39   40   41   42   43   ...   49


    написать администратору сайта