0

是否可以将 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 的新手。我曾经用循环写入文件,你的“魔法”指令以不同的方式做事,我不明白我怎么能在主要有利的情况下进行操作。

非常感谢您的帮助

4

1 回答 1

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 ) )

是那个神奇的 - 它根据给定的格式写出 vals,但不是写入文件而是写入字符数组的东西,数组的每个元素都充当“文件”中的记录

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

于 2012-11-21T11:53:55.563 回答