此格式产生哪种类型的整数数组?

时间:2019-06-21 09:33:41

标签: fortran format

我是FORTRAN的新手,需要使用代码来读写数据。该代码较旧,我需要了解内部的情况;)

代码使用

读取.dat文件的一行。
FORMAT(36A2): 
READ(11,FORMAT(36A2)) ITEXT

变量ITEXT被声明为Integer数组: INTEGER(KIND = 2),DIMENSION(36):: ITEXT

所以,如果我读以下行:

          SREF   = 0.031416,
ITEXT hast the following value:
2313   8224  21075  17989   8224  15648  12320  12334  12595  12596  11318   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224   8224

如果我做WRITE(11,FORMAT(36A2)),它将把我的全文还给我。           SREF = 0.031416

那么,这种“整数代码”是什么? 如何使用它,为什么要使用它?

对我来说这是全新的。

以下部分是示例代码。整数“ 21075”代表“ SREF = 0.031416”的“ SR”

program example

    integer :: ITEXT = 21075

    WRITE (*,100), ITEXT
100 FORMAT(36A2)

end program example

2 个答案:

答案 0 :(得分:0)

原始Fortran中没有字符数据类型。字符数据必须存储为整数。可以使用过时的Hollerith常数将字符串存储在其中

  ITEXT = 2HSR

这在ITEXT中存储了两个字符“ SR”。现在一种更好的方法是使用read将其存储在此处

  WRITE(ITEXT,'(A2)') "SR"

  WRITE(ITEXT,'("SR")')

格式本身

100 FORMAT(36A2)

是普通的字符串输入/输出格式。它输出长度为2的36字符串。通常,它应用于字符串数据,但是如果字符数据存储在其他数据类型中,它也可以应用于其他数据类型。如果数字数据类型实际上包含数字数据,则字符格式的输出将是垃圾。

请注意,(KIND=2)中的文字常量2是不可移植的,并且不能保证是存储两个字符的正确常量(不同于非标准INTEGER*2)。参见Fortran: integer*4 vs integer(4) vs integer(kind=4)

答案 1 :(得分:0)

代码代表了一种非常古老的fortran风格。字符串的字符作为ASCII表的十进制值编码为数组itext的整数元素。当代码读取格式为A2的字符串时,文件输入的两个字符将存储到每个数组元素中。产生任何元素的数值将是:

ASCII_1*2**8 + ASCII_2

其中ASCII_1和ASCII_2是ASCII表中字符的两个小数位。

由于前两个字符是ASCII值32的''(空白),您将得到 32 * 2 ** 8 + 32 = 8224

尝试使用此程序

program bla
integer(KIND=1), DIMENSION(72) :: itext
open(11,file='bla.dat',status='old')
read(11,'(72a1)') itext
write(*,'(72a1)') itext
write(*,'(72(i4,2x))') itext
close(11)
end program bla

然后您将获得一串数字,例如''32,'S'83等。