2011-11-10 105 views
0

我想更改文本文件的一部分。該文件的內容如下:如何將數據寫入TXT文件中的特定位置?

PLANE 
CV = 1.4, PRINT = 1 
Ks = 3.17, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 

我想用隨機數替換ks=3.17部分。更具體地說,文本文件是另一個可執行文件的輸入,我想修改Ks值,運行可執行文件,再次修改Ks值,等等。

+1

此使用SED從shell腳本比使用fortran更容易。 – SiggyF

回答

0

有可能有更好的方法來做到這一點,但這是有效的。它寫入一個新的輸出文件,將Ks值更改爲9.99。

Program modify_value 

implicit none 

character(len=100) :: row 
integer :: j 
real :: Ks 

Ks = 9.99 

open(unit=1,file='data.txt',status='old') 
open(unit=2,file='data_modified.txt',status='unknown') 

do j=1,4 
    read(1,'(a)') row 
    if (j==3) then 
    write(2,'(a,F5.2,a)') row(1:4), Ks, trim(row(10:)) 
    else 
    write(2,'(a)') trim(row) 
    end if 
end do 

close(1) 
close(2) 

End Program 
0

您是否有很強的理由使用fortran來執行此任務?你在最後一段中描述的任務可以用其他語言來減少忙碌。例如,如果你寫了一個python腳本像下面,

import os, random 

# repeat 10 times 
for i in range(10): 

    # generate random Ks with Normal distribution, mean=3.17, stdev=1 
    ks = random.normalvariate(3.17,1) 

    # write input file 
    with open('inp.txt','w') as f: 

     f.write( 
"""PLANE 
CV = 1.4, PRINT = 1 
Ks = %4.2f, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE""" % ks) 


    # run the program 
    os.system("a.exe") 

給定的樣本Fortran程序就是這樣,

program test 
    character(len=80) :: line 
    open(10,file='inp.txt',status='old') 
    do i=1,4 
    read(10,'(a)') line 
    write(*,*) trim(line) 
    enddo 
end program 

你會得到

 
$ python test.py 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 1.21, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 3.08, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 4.55, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 4.10, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 2.24, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 4.62, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 2.76, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 2.69, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 4.58, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
PLANE 
CV = 1.4, PRINT = 1 
Ks = 3.32, G = 120.67, DIST = 0.34, POR = 0.456, ROCK = 0.3 
PLANE 
+0

帶有EXECUTE_COMMAND_LINE命令並調用一些隨機數函數和類似寫入的Fortran程序實際上已不再存在。 –

相關問題