implicit none
real, allocatable:: x(:,:)
integer col, row, kol, i, j, k
open (10, file='isx.txt', status='old', err=11)
read (10, *) row, col
!чтение из файла размера матрицы
allocate (x (row, col))
! чтение матрицы из файла
call read_matr (x, row, col)
close(10)
!вывод матрицы на экран
print*,'isx matr'
print '(<col> F3.0)', ((x(i,j), j=1,col), i=1,row)
!определение количества столбцов равных первому
k = kol (x, row, col)
print '(A, I2)', ' kol= ', k
call write_res (x,row,col,k)
stop
!oбработка ошибок
11 print*, ' oshibka open isx file'
End program
!считывание матрицы из файла
Subroutine read_matr (x, n, m)
implicit none
integer,intent(in)::n, m
real,intent(out):: x(n, m)
integer i, j
read(10, *) ((x(i, j), j=1, m), i=1, n)!
End subroutine
Integer function kol (x, n, m)
implicit none
integer,intent(in)::n, m
real,intent(in)::x(n, m)
integer i,j,k
logical f
k=0
do j= 2, m
f=.true.
do i= 1, n
if (x(i, j)/= x(i, 1))then
f=.false.
exit
endif
enddo
if (f)k=k+1
enddo
kol=k
End function
!запись в файл результата
Subroutine write_res(x,n,m,k)
implicit none
integer,intent(in)::k,n,m
real,intent(in)::x(n, m)
integer i, j
open (20, file='res.txt', status='new', err=12)
write (20,'(A)'),'isx matr'
write(20, '(<m> F3.0)'), ((x(i,j), j=1,m), i=1,n)
write(20,'(A, I2,A)'),'w matrice ',k,' stolb = perwomu'
close (20)
return
12 print*,'oshibka zapisi в файл'
End subroutine
Неформатные файлы
Рассмотрим теперь неформатные файлы последовательного и прямого доступа.
|
|
Неформатный файл не может быть создан и просмотрен в текстовом редакторе. Для его создания обязательно нужна программа, т.к. данные хранятся в машинном представлении (данные передаются без преобразования).Метод доступа будет фигурировать в операторе open в спецификаторе access = ‘sequential/direct’, а форматв спецификаторе form = ' unformatted'.
Из неформатного файла одним оператором ввода можно прочитать только одну запись. Каждый оператор вывода создает одну запись.
Рассмотрим сначала неформатные файлы последовательного доступа.
Для этих файлов справедливы все правила, которые используются для обработки, корректировки, добавления и удаления текстовых файлов. Разница лишь в том, что чтение и запись осуществляется без формата. Кроме того, как уже упоминалось для их создания и просмотра нужна специальная программа.
Пример
В неформатном файле последовательного доступа хранятся вещественные числа. Удалить из файла наименьшее значение.
Удаление будем делать, используя вспомогательный файл.
Вообще лучше сделать в отдельном проекте неформатный файл и подключить его в свой проект, чтобы не создавать файл при каждом запуске программы.
!процедура создания неформатного файла