我想更改文本文件的一部分。該文件的內容如下:如何將數據寫入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值,等等。
我想更改文本文件的一部分。該文件的內容如下:如何將數據寫入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值,等等。
有可能有更好的方法來做到這一點,但這是有效的。它寫入一個新的輸出文件,將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
您是否有很強的理由使用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
帶有EXECUTE_COMMAND_LINE命令並調用一些隨機數函數和類似寫入的Fortran程序實際上已不再存在。 –
此使用SED從shell腳本比使用fortran更容易。 – SiggyF