I want to copy a file from a folder and write at specific lines of the file using fortran. I am using Windows, GNU fortran compiler. Here is sample file and code.
file1.txt
1 *
2 **
3 ***
4 ****
5 *****
6 ******
7 *******
8 ********
9 *********
10 **********
Here is code:
I defined some variables. Only if two criteria match (particular variable value and line number), I want to write in the new text in the file. I tried using system
command to copy, but it fails. Can anyone tell me correct way of using this? And program got run time error FORMAT present for unformatted text
program read
integer :: a,b,c,d,e
CHARACTER (LEN=200) :: str
a=0
b=1
c=0
d=1
e=0
!call system ("copy" // "D:\test1\file1.txt"," ", // "D:")
!This command fails
open (unit=10, file="file1.txt", access="direct", &
form="unformatted", action="readwrite", recl=100 )
do i=1,10,1
read (10,*) str
if(a==0 .AND. i==3) then
write(10,100) 'This is ',i,' line'
else if(b==0 .AND. i==4) then
write(10,100) 'This is ',i,' line'
else if(c==0 .AND. i==5) then
write(10,100) 'This is ',i,' line'
else if(d==0 .AND. i==6) then
write(10,100) 'This is ',i,' line'
else if(e==0 .AND. i==7) then
write(10,100) 'This is ',i,' line'
100 format (2a,i0,1X)
end if
end do
close (unit=10)
end program
Can I read and write in the same file? Please share your comments. I referred to some questions Fortran - How to write data to specific line in the file? but couldn't help me.
There are a couple things wrong with your system call. First, you need a space between copy
and the first argument. Second, you need a destination file, not just a folder. Also, you should only be using string concatenaters //
, not commas. For example, if you want to copy to a new file name file2.txt
, you can use a system call like this:
call system ("copy " // "D:\test1\file1.txt " // "D:\test1\file2.txt")
Because you're using literal strings instead of variables, you can simplify it by getting rid of the concatenaters:
call system ("copy D:\test1\file1.txt D:\test1\file2.txt")
for illustration, here is how to direct access work with a text file:
implicit none
character*8 x
! create a test file, all lines 8 characters:
open(20,file='test.txt')
x='12345678'
write(20,'(a)')x
x='asdfghjk'
write(20,'(a)')x
x='qwertyui'
write(20,'(a)')x
close(20)
! open file direct access, note record length is 8+2 because I'm
! stuck on DOS today with cr/lf line ends
open(20,file='test.txt',access='direct',recl=10,form='formatted')
! read whatever we want
read(20,'(a)',rec=3)x
write(*,*)'line 3 is',x
! overwrite a particular line -- note the format is exactly 10 char
! including the manually added line ending
write(20,'(f5.2,i3,2a)',rec=2)3.14,42,char(13),char(10)
end
resulting file:
12345678 3.14 42 qwertyui
来源:https://stackoverflow.com/questions/29688290/how-to-write-at-specific-lines-in-fortran