回 帖 发 新 帖 刷新版面

主题:请问如何根据条件定义不同类型数据

有一个问题想请教大家:
我要根据不同的条件来定义不同类型的数据
如,如果文件中的
数据类型是1
我定义integer(1)数组读数据

如果类型是2
我定义integer(2)数组读数据

如果类型是3
定义integer(4)

if type .eq. 4
real(4) data(len)

if type .eq. 5
real(8) data(len)
在C++中可以把数据定义放到if语句中,可是FORTRAN只能放在最前面
请问大家怎么根据不同条件定义不同类型的数据呢?

回复列表 (共6个回复)

沙发

我首先想到的是用type(自定义数据类型),但是觉得还是用select case更适合你上面说的情况

板凳

使用转换类型函数

3 楼

谢谢回答,数据的定义能放在select case语句中吗?

4 楼

数据类型转换?
也就是说先定义成real(8)吗,再转成自己需要的?
real(8) arr(3000,200)
integer(2) arrint(3000,200)
读出来arr后再arrint=arr
这样定义了arr后不是需要很多额外的空间吗?那我还不如直接用real(8)的类型了,不用转成integer(2)了,我根据需要定义不同类型的数组,就是想节约点空间。因为我的数据很大的。

我的问题实际是:读文件时,文件头记录了数据类型,我如何读取这个类型信息后,再定义相应类型的数据去读取文件下面的数据?如果定义类型不对,读数据就会不对吧。

5 楼


你可以在程序前面先定义两个可变数组。

REAL*8 , ALLOCATABLE :: A(:)
INTEGER ,  ALLOCATABLE :: B(:)

这个时候是不分配数组空间的。
然后读你的文件头》

如果是整形就分配数组

ALLOCATE(B(个数))

如果是实型就分配数组

ALLOCATE(A(个数))

不知道这个答案是否满意

6 楼


非常感谢academician,这个方法非常好!

我来回复

您尚未登录,请登录后再回复。点此登录或注册