- •Часть 3
- •Содержание
- •30. Работа с файлами
- •Примечание:
- •31. Открытие файлов
- •File not found
- •32. Непосредственная работа с файлом
- •33. Форматный вывод информации
- •34. Форматное чтение информации из файла
- •35. Обработка сбойных ситуаций и ситуаций “конец файла” при вводе-выводе информации
- •Обработка сбойной ситуации:
- •7 Write (6,*) ’Введите a,I,b’
- •Обработка ситуации “конец файла”:
- •36. Операторы для работы с записями в файле
- •37. Дополнение файла информацией
- •Первый способ дополнения файла информацией:
- •10 Write (6,*)’Всего записей в файле’,kzap
- •Второй способ дополнения файла информацией
- •4 Write (6,*)’в файле было записей’,kz
- •38. Работа с текстом
- •39. Текстовые константы
- •Правило:
- •10 Format (a8)
- •10 Format (a)
- •1) Вводится меньше 8 символов, то они помещаются в переменную imfile, а недостающие до 8 позиции дополняются пробелами.
- •2) Вводится имя большего размера, чем 8 позиций, то будут восприняты только первые 8 символов и они будут записаны в переменную imfile;
- •8 Format (a10/5a5)
- •9 Format (1x,a10/1x,5a5)
- •9 Format (1x,a10/1x,5a5)
- •Семин а.В.
- •Правила ввода-вывода текстовой информации:
- •1). Ввод информации
- •Примечание:
- •40. Текстовые подцепочки
- •41. Вывод графиков
- •42. Эквивалентирование текстовых переменных
- •If(fam1.Eq.Fam2) write(6,9) fam2,k1,k2,k3,k4
- •7 Format (a40,i5,a15,i5,a7)
- •If (ngod.Ne.1962) goto 4
- •9 Format (1x,a40,i5,a15,i5,a7)
- •10 Write(4,*)’Конец просмотра базы данных’
- •43. Создание библиотек
- •44. Решение дифференциальных уравнений
- •45. Работа с комплексными данными
- •Правило:
- •46. Ввод-вывод переменных комплексного типа
- •Примечание:
- •47. Встроенные функции комплексного типа
- •48. Оператор equivalence
- •Правило:
- •49. Результаты арифметических операций в выражениях с данными разного типа
- •50. Файлы прямого доступа
- •51. Способы передачи форматных записей
- •52. Модификации оператора цикла do
- •6 Continue
- •If (y.Lt.0.05) cycle
- •55. Командные файлы
- •If errorlevel 1 go to exit
- •If errorlevel 1 go to done
Второй способ дополнения файла информацией
Существует функция EOF(n) состояния файла. Если открыт канал операторомOPEN:
OPEN (UNITE=3, FILE=’…)
и мы производим чтение оператором READ:
READ(3,*) …
то в обычном режиме функция EOF(3) имеет значение.FALSE.. В том случае, если из файла прочитана последняя запись, функцияEOF(3) принимает значение .TRUE..
Значение этой функции можно использовать для обнаружения оператора конца файла и дополнения файла информацией.
По сравнению с предыдущим способом не требуется делать возврат назад на одну строку и восстанавливать последнею запись.
Задача:
В файле ZONAнаходятся записи. В каждой записи три числаA,B,C. Подсчитать количество записей в файле, дополнить его аналогичной информацией. Пополнение файла информацией остановить при вводе слова “конец”.
OPEN (4,FILE=’ZONA’, STATUS=’OLD’)
KZ=0
2 IF(EOF(4)) GO TO 4
READ (4,*) A,B,C
KZ=KZ+1
GO TO 2
4 Write (6,*)’в файле было записей’,kz
WRITE (6,*)’Введите новые значения A, B, C’
8 READ (5,*,ERR=12) A,B,C
WRITE (4,*) A,B,C
Строку с новыми данными добавляем в файл.
KZ=KZ+1
Повторяем ввод данных с клавиатуры и выводим их в файл
GOTO 8
При вводе текста вместо числа наступит сбойная ситуация и управление будет передано на метку 12.
WRITE (6,*)’Всего записей’,KZ
CLOSE(4)
PAUSE
STOP
END
При вводе любого текстового символа произойдёт сбой по чтению, и программа будет снята с выполнения. Чтобы программа не снялась с выполнения в операторе READнеобходимо предусматривать обработку сбойной ситуации. Что мы и сделали в строкеREAD(5,*,ERR=12)A,B,C. В противном случае текст (“всего записей”,KZ) не будет выведен никогда.
38. Работа с текстом
Средствами ФОРТРАН-4 в одну ячейку памяти можно записать до 4 символов текстовой информации. Начиная с ФОРТРАН-77 в одну ячейку памяти (одной текстовой переменной) может быть присвоен текст длиной до 254 символов, но эти переменные должны быть описаны специальным оператором описания:
CHARACTER
CHARACTER*10 A,B,C(12),D*8,K*5(10)
Это значит, что в программе переменные А, В, Dи массивы С и К будут текстового типа (строковые).
*10 – групповой описатель длинны, распространяется на А, В, С. Резервирует для каждой переменной в оперативной памяти ЭВМ по 10 байт на каждую переменную, где могут помещаться до 10 текстовых символов.
Массив С(12) состоит из 12 элементов, каждый из которых может содержать до 10 текстовых символов.
Массив Kтекстового типа, содержит 10 элементов длиной по 5 байт.
39. Текстовые константы
Текстовые константы могут быть представлены в двух формах:
а). старая форма – холлеритовская строка – представляет собой число выводимых символов n, признак константы латинская букваHи сами выводимые символы:
nHнабор символов
n– целая беззнаковая константа в диапазоне 1-255.
Пример:
9НЭнергофак
б). строка символов, заключённая между двумя апострофами
'ЭНЕРГОФАК-2000'
'ЭНЕРГОФАК''2003'
Символ апостроф внутри текста отображается двумя апострофами, идущими подряд.
Текстовая константа – это строка символов, которая заключена между двумя апострофами или задана холлеритовской строкой.
Значения текстовых переменных могут быть заданы оператором присваивания или оператором DATAили в результате ввода информации.
K(1)='ВЕСНА'
K(2)=4HЗИМА
DATA K(3)/'ОСЕНЬ'/
READ (5,7) K(4)
7 FORMAT (A5)