Fortran Help: Matching Data and writing values

  • Fortran
  • Thread starter timewilltell
  • Start date
  • #1

Main Question or Discussion Point

hi

i have two file with following data

file-1 (named: xyxp.dat)

6
1 1 0 10
3 2 1 5
3 5 4 8
0 0 0 11
1 2 5 4
5 6 4 12

file-2 (named: xyzn.dat)

6
1 0 0 0
2 1 1 0
3 3 2 1
4 1 2 5
5 3 5 4
6 5 6 4

now i want to match each value of the first three columns of file -1 with the corresponding values in the last three columns of file-2. for example first three values form file-1 are
1 1 0 now the program should search 1 1 0 in last three columns of file 2, and then write 2 10 as output
the result similar to this is required as output

1 11
2 10
3 5
4 4
5 8
6 12

till now i have written the following program, but really got confused with matching data

program main
implicit none

integer :: pn,nn
integer :: i
real ,allocatable, dimension (:,:) :: x , ix

open (11,file='xyxp.dat')
read (11,*) pn
allocate (x(pn,4))
do i=1,pn
read (11,*) x(i,:)
end do
close (11)
c write(*,*) x

open (12,file='xyzn.dat')
read (12,*) nn
allocate (ix(nn,4))
do i=1,nn
read (12,*) ix(i,:)
end do
close (12)
c write(*,*) ix

do i=1,nn
if (x(:,1)==ix(:,2).and.x(:,2)==ix(:,3).and.x(:,3)==ix(:,4)) then
ix(i,1)=x(i,4)
write(*,*) ix(i,1)
end if
end do

end program

kindly help me in this matter
 

Answers and Replies

  • #2
1,065
53
You'd better declare those arrays INTEGERs, by the way, comparison of REALs with "==" may fail any time.

You need a double loop to compare each x row to all ix rows.

How about something like this:
Code:
do i=1, pn
  do j = 1, nn
    if (x(i,1)==ix(j,2).and.x(i,2)==ix(j,3).and.x(i,3)==ix(j,4)) then
      write(*,*) ix(j,1), x(i,4)
    end if	
  end do
end do
 
  • #3
yup real number fail with "==" .... any suggesstion for real numbers
 
  • #4
1,065
53
just compare the absolute difference to the accuracy desired:
Code:
if  ( abs( x(i,1) - ix(j,2) ) < 0.0005  ) then
   ! whatever
end if
 

Related Threads on Fortran Help: Matching Data and writing values

  • Last Post
Replies
1
Views
2K
Replies
5
Views
2K
  • Last Post
Replies
2
Views
4K
Replies
1
Views
3K
Replies
8
Views
7K
Replies
2
Views
597
Replies
6
Views
1K
  • Last Post
Replies
1
Views
2K
  • Last Post
Replies
10
Views
8K
Top