2011-11-10 28 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

を取得しますです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 

あなたはシェルスクリプトからこのためにsedの使い方

 
$ 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プログラムで、乱数関数や同様の書き込みを呼び出すことは、実際にはもう必要ありません。 –