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 namefile2.txt
, you can use a system call like this:Because you're using literal strings instead of variables, you can simplify it by getting rid of the concatenaters:
for illustration, here is how to direct access work with a text file:
resulting file: