- •Часть 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
35. Обработка сбойных ситуаций и ситуаций “конец файла” при вводе-выводе информации
Оператор ввода имеет структуру следующего вида:
READ (n, m1, ERR=m2, END=m3) список
где n– номер канала ввода;
m1– метка оператораFORMATили “ * ”;
m2– метка оператора, по которому передаётся управление, если при вводе информации произошёл сбой по чтению.
Сбойная ситуации наступает в том случае, когда вводимая информация не соответствует описанию полей оператора FORMAT. Например: целое число вводится с десятичной точкой; вещественное число вводится с двумя минусами; число не соответствует формату; вместо числовой информации вводится текстовая информация (распространённая ошибка); при форматном вводе ставится запятая, которая является ошибкой при отделении одного числа от другого.
m3– метка, на которую передаётся управление, если при попытке чтения очередной записи обнаружен конец файла.
В обычном режиме во время чтения информации при возникновении ошибки задача снимается с выполнения. Из-за досадной ошибки может быть потеряно много расчетного времени. Но при обработке сбойной ситуации этого можно избежать.
Обработка сбойной ситуации:
Пример обработки сбойных ситуаций при вводе исходных данных с экрана дисплея:
OPEN (4,FILE=’REZ.DAT’)
7 Write (6,*) ’Введите a,I,b’
READ (5,8,ERR=11) A, I, B
FORMAT (F6.2,I4,E9.3)
Прочитанные исходные данные выводятся в файл результатов
WRITE (4,12) A,I,B
FORMAT (2X,’Исходные данные’/4X,’A=’,F7.2,’ I=’,I4,’ B=’,G12.4)
Формат вывода данных может отличаться от формата ввода.
GOTO 13
WRITE (6,*) ’При вводе ИД произошёл сбой. Введите ИД заново по
*формату F6.2, I4, E9.3’
GO TO 7
D=A+B
…
Если при вводе информации в данной программе произошла ошибка, то управление передаётся на метку 11. По этой метке мы выдаём текстовое сообщение об ошибке и подсказку, как эту ошибку исправить.
После этого повторяем ввод исходных данных.
Обработка ситуации “конец файла”:
Обработка ситуаций “конец файла” используется при чтении файла до конца. В обычном режиме без обработки ситуаций “конец файла” произойдёт прекращение выполнения программы из-за возникновения фатальной ошибки.
OPEN (4,FILE=’DAN.DAT’)
READ (4,8,END=11) A,I,B
FORMAT (F6.2,I4,E9.3)
WRITE (6,12) A,I,B
12 FORMAT (2X,’Прочитали’,4X,’A=’,F7.2,’ I=’,I4,’ B=’,G11.4)
WRITE (6,*)’Вычисляем’
…
GO TO 7
WRITE (6,*)’При чтении ИД обнаружен конец файла. Конец расчета’
…
STOP
END
Задача:
Система передачи данных записывала в файл информацию U,I,cosφ,t. При каждом скачкообразном изменении нагрузки записывается новая запись (количество записей неизвестно). Подсчитать количество записанных записей, а так же количество электроэнергии, потреблённой нагрузкой за истекший период.
Открываем файл, читаем исходные данные и формируем массивы Pиt., одновременно считая количество записей. При достижении конца файла переходим к вычислению сумм и выводу результата.
DIMENSION P(1000),T(1000)
OPEN (4,FILE=’NAGR.DAT’,STATUS=’OLD’)
I=1
KZ=0 Задаем переменную КZ – счетчик количества прочитанных записей
READ (4,*,END=8) U,TOK,CF,T(I) При достижении конца файла управление будет передано на метку 8
P(I)=U*TOK*CF
KZ=KZ+1
I=I+1
GOTO 11
8 WRITE (6,*)’Количество записей=’,KZ
SQ=0.
DO 12 J=1,KZ–1
12 SQ=SQ+P(J)*(T(J+1)–T(J))
WRITE (6,*)’Количество электроэнергии =’,SQ
CLOSE(4)
PAUSE
STOP
END