Dad*_*dep 0 fortran text-files
我正在尝试从 fortran 写入文本文件。
我做了这个简短的测试程序,但当然它不起作用,因为它不会创建一个可读的文本文件:
PROGRAM teste
INTEGER(4) REC2,RECL1
character(20) :: charI, wanted
RECL1=10
DO REC2=1,10
OPEN(1,FILE='teste.txt',ACCESS="direct",RECL=RECL1);
write (charI, "(A5,I4)") "hello", REC2
wanted=trim(charI)
write(1,REC=REC2) wanted
close(1)
END DO
END PROGRAM teste
Run Code Online (Sandbox Code Playgroud)
我读了很多不同的东西,但仍然不清楚应该如何写。
在写之前我需要转换为字符串吗?如果是为什么?
尝试这个
PROGRAM test
IMPLICIT NONE
INTEGER, PARAMETER :: ascii = selected_char_KIND ("ascii")
INTEGER, PARAMETER :: ucs4 = selected_char_KIND ('ISO_10646')
INTEGER :: ix
CHARACTER(len=5,kind=ucs4) :: greeting = ucs4_"hello"
OPEN(10,FILE='test.txt')
DO ix=1,10
WRITE (10,'(A5,I4)') greeting, ix
END DO
CLOSE(10)
END PROGRAM test
Run Code Online (Sandbox Code Playgroud)
……评论……
PROGRAM test
IMPLICIT NONE
Run Code Online (Sandbox Code Playgroud)
所有好的 Fortran 程序都包含这行implicit none
;原因在 101 Qs 和 As here on Stack Overflow 中有解释,我不会在这里重复。
INTEGER, PARAMETER :: ascii = selected_char_KIND ("ascii")
INTEGER, PARAMETER :: ucs4 = selected_char_KIND ('ISO_10646')
Run Code Online (Sandbox Code Playgroud)
最新的 Fortran 标准要求编译器提供这两个kind
字符。老实说,我不确定是否iso_10646
与 UTF-8 相同,但如果不是,您可能不走运。在这里,我定义了两个参数,用于标识稍后在程序中使用的字符类型。出于您的目的,这些参数中的第一个是不必要的,但您也应该了解它。
我想您的编译器可能支持其他字符类型,请阅读文档。
(另外:从技术上讲,还有第三个字符种类名称,default
。这可能会将字符种类设置为ascii
或iso_10646
,最有可能是前者,但如果这对您很重要,请检查编译器的文档。)
INTEGER :: ix
CHARACTER(len=5,kind=ucs4) :: greeting = ucs4_"hello"
Run Code Online (Sandbox Code Playgroud)
在这些行的第二行中,我定义了一个带有文本hello
和种类的字符变量ucs4
(正如您在上面看到的,它是 的本地代码iso_10646
)。如果没有前缀ucs4_
,字符串hello
将被解释为类型default
,然后ucs4
在存储到变量中时转换为greeting
。在这种情况下,前缀中ascii
和ucs4
前缀中的字符(表示)之间存在 1:1 映射是完全没有必要的,但在其他情况下则不会。
OPEN(10,FILE='test.txt')
DO ix=1,10
WRITE (10,'(A5,I4)') greeting, ix
END DO
CLOSE(10)
Run Code Online (Sandbox Code Playgroud)
我已经删除了关于直接访问和写入文件中特定记录的所有废话。对于您的迫切需要,这一切都是不必要的。所以这个循环会将greeting
(即 ucs4 字符串hello
)和一个行索引写入文件test.txt
10 次。
END PROGRAM test
Run Code Online (Sandbox Code Playgroud)