Извлечение указанного параметра c и его количества из текстового файла - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть текстовый файл (S.txt), который содержит определенный параметр с его количеством в каждом интервале. Примерно так:

-
-
x=a
-
-
x=b
-
-
x=c
-
-

.
.
.

Я хочу написать код Фортрана, чтобы открыть текстовый файл (S.txt) и прочитать его, чтобы найти каждый «x» и прочитать его количество в параметре. как то так:

a

b

c

. , .

Я придумал этот код, но он не работает:

PROGRAM  deter

IMPLICIT  NONE 
real,Dimension(2) :: value
open(unit=40,file='D:\S.txt',action='read')
READ(40,fmt='(2X,f3.3)') value

close(40)

END PROGRAM  deter

, когда я запускаю эту программу, я не получаю ОШИБКУ, но она также не работает.

есть предложения?

1 Ответ

0 голосов
/ 01 мая 2020
program extract_value

implicit none
integer :: ios
character(len=200), allocatable :: command(:)
character(len=200), allocatable :: word(:)
real, allocatable :: x(:), deter(:)
character(len=200) :: line
integer :: n, i, j, r
character (len=5), parameter :: sstr='x='

open(unit=50, file='D:\S.txt', iostat=ios)
if ( ios /= 0 ) stop "Error opening file S.txt"

n = 0

do
    read(50, '(A)', iostat=ios) line
    if (ios /= 0) exit
    n = n + 1
end do

allocate(command(n))
allocate(word(n))
rewind(50)

j=0

do i = 1, n
    read(50,'(A)') command(i)
    read (command(i),'(a2)') word(i)
    if (word(i)==sstr) then
    j=j+1
    end if
end do

allocate(x(n))
allocate(deter(j))

x=0

do i = 1, n
if (word(i)==sstr) then 

read(command(i), fmt='(2X,f5.2)') x(i)

end if
end do 

deter=0
deter=pack(x, x /= 0)
close(50)


open(unit=100, file='D:\R.txt', action="write",status="replace")
WRITE(100,fmt='(2X,f5.2)')(deter(r), r=1,j)
close(100)


end program extract_value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...