Fortran FORTRAN Open Arbitrary number of files in Do Loop

AI Thread Summary
The discussion focuses on how to dynamically create and open files in a DO loop using Fortran, specifically Fortran 90. A user seeks to incorporate the loop iterator into the filename, aiming for a format like 'input001.fmt'. Another participant provides a solution, demonstrating how to use a character variable to format the filename correctly, including the necessary file extension. The example code shows how to write the iterator into the filename and successfully open the files. Additionally, a related question arises about appending data to an existing file without overwriting it. The solution involves using the 'append' access method when opening the file, allowing new data to be added without deleting previous content. This exchange highlights practical coding techniques in Fortran for file handling and dynamic filename generation.
minger
Science Advisor
Messages
1,494
Reaction score
2
I have a quick question that I've always wondered exactly how to do but never needed to. Well of course now I do. I have a DO loop that loops an arbitrary number of times. I would like to open a file each time it comes around, using the DO loop iterator as part of the filename. Ideally, it would look something like...
Code:
n = 5
DO i=1,n
 OPEN(11,file='input000',i,'.fmt',form='formatted')
 blah blah blah
 CLOSE(11)
END DO
So, if anyone knows how to parse the variable into that text string, I would appreciate it. Thanks,
 
Technology news on Phys.org
I do not know what version of Fortran you run, but this example should be close to what you can do.

Code:
      IMPLICIT INTEGER(I-N), REAL*8(A-H,O-Z)
      N=5
      CHARACTER *10 FN
      DO 5 I=1,N
      WRITE(FN,10)I
      WRITE(6,*)FN
      OPEN(1,FILE=FN)
      CLOSE(1)
    5 CONTINUE
   10 FORMAT(5HINPUT,I3.3)
      STOP
      END
The screen output looks like this, and the corresponding files have been opened (and closed):
Code:
INPUT001
INPUT002
INPUT003
INPUT004
INPUT005
 
BTW, I'm using FORTRAN90. I get that and it'll get me 90% there. How can I then add a '.fmt' as a file extension? I imagine the period needs some special character designation?

Thanks,
 
You only have to add the suffix at the end of the format statement, and don't forget to inccrease the length of FN to 12, as follows:

Code:
      IMPLICIT INTEGER(I-N), REAL*8(A-H,O-Z)
      N=5
      CHARACTER *12 FN
      DO 5 I=1,N
      WRITE(FN,10)I
      WRITE(6,*)FN
      OPEN(1,FILE=FN)
      CLOSE(1)
    5 CONTINUE
   10 FORMAT('INPUT',I3.3,'.FMT')
      STOP
      END
I believe the translation to F90 should be trivial.
 
Beautiful; working. Thanks a bunch!
 
Glad that everything works out!
 
Hi everyone

I have got similar problem..

How can i write to an existing file without deleting previous data.

so basically i want to add new info every time i run the program.


Thanks
 
Try using
Code:
ENDFILE
http://docs.hp.com/en/B3908-90002/ch08s06.html?btnNext=next%A0%BB
 
Last edited by a moderator:
Open the file with the keyword 'append', for example:

Code:
OPEN(1, FILE='mydata.dat', ACCESS='APPEND')
 

Similar threads

Replies
8
Views
1K
Replies
12
Views
10K
Replies
8
Views
4K
Replies
12
Views
3K
Replies
5
Views
5K
Replies
6
Views
3K
Replies
1
Views
3K
Replies
2
Views
2K
Replies
5
Views
2K
Replies
8
Views
2K
Back
Top