fortran 90更改数组类型/强制转换

时间:2012-11-21 10:10:50

标签: arrays casting copy fortran fortran90

是否可以将double类型数组的类型(或副本)更改为char?

我的目标是将准确的数据与字符串混合,然后写入.txt文件。


根据您的提示,我会找到以下代码:

Program logArray

Implicit None

Integer, Parameter :: wp = Selected_real_kind( 12, 70 )

Real( wp ), Dimension( 1:5 ) :: vals
Character( Len = 40 ), Dimension( 1:5 ) :: stuff

character (40) :: fileName
Integer :: i,stat


Call Random_number( vals )

write(*,*) 'Printing Values from Real array'
do i = 1, 5
    write(*,*) 'vals', i, vals(i)
end do


Write( stuff, '( "Value ", i1, " is ", f20.16 )' ) &
   ( i, vals( i ), i = 1, Size( vals ) )

fileName='log.txt'

open(2, file=fileName, status='replace', iostat=stat)
    if (stat /= 0) then
        write(*,*) fileName, ' The file  cannot be opened !'
        go to 20
    end if

    !Write( *, '( 99999( a, :, / ) )' ) stuff  
    Write( 2, '( 99999( a, :, / ) )' ) stuff 

    close(2)


    20 write(*,*) 'File Closed' 

End Program logArray

但是,如果我想在log.txt上写一些像

这样的话,我仍然没有得到它

“-----价值标题1 ---------”

值1为0.9975595900926172
值2为0.5668247076112733

“-----价值3意味着爱-------” 值3为0.9659153754961249
值4为0.7479276854714322
值5是0.3673908973747557

我是Fortran的新手。我曾经写过带有循环的文件,你的“神奇”指令以不同的方式处理事情,我不知道如何操纵主要的帮助。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:4)

不太清楚你的意思,但你可能需要的是一个内部文件 - 这就是你在Fortran中将数字数据转换成字符形式的方式。这是一个例子:

[luser@cromer stackoverflow]$ cat char.f90
Program char

  Implicit None

  Integer, Parameter :: wp = Selected_real_kind( 12, 70 ) 

  Real( wp ), Dimension( 1:5 ) :: vals

  Character( Len = 40 ), Dimension( 1:5 ) :: stuff

  Integer :: i

  Call Random_number( vals )

  Write( stuff, '( "Value ", i1, " is ", f20.16 )' ) &
       ( i, vals( i ), i = 1, Size( vals ) )

  Write( *, '( 99999( a, :, / ) )' ) stuff

End Program char
[luser@cromer stackoverflow]$ nagfor -C=all -C=undefined char.f90
NAG Fortran Compiler Release 5.3.1 pre-release(904)
[NAG Fortran Compiler normal termination]
[luser@cromer stackoverflow]$ ./a.out
Value 1 is   0.5247509555250293         
Value 2 is   0.2338414404620047         
Value 3 is   0.8165253430643411         
Value 4 is   0.2788076219798084         
Value 5 is   0.9609032005446272         

该行

  Write( stuff, '( "Value ", i1, " is ", f20.16 )' ) &
       ( i, vals( i ), i = 1, Size( vals ) )

是神奇的 - 它根据给定的格式写出val,但不是写入文件而是写入字符数组的东西,数组的每个元素充当记录我的“文件”< / p>

我希望这是有道理的。更具体地说,我们需要更多细节。