主题:请问如何根据条件定义不同类型数据
keyman
[专家分:0] 发布于 2010-06-04 22:59:00
有一个问题想请教大家:
我要根据不同的条件来定义不同类型的数据
如,如果文件中的
数据类型是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个回复)
沙发
xiaoliu420 [专家分:20] 发布于 2010-06-04 23:15:00
我首先想到的是用type(自定义数据类型),但是觉得还是用select case更适合你上面说的情况
3 楼
keyman [专家分:0] 发布于 2010-06-05 10:30:00
谢谢回答,数据的定义能放在select case语句中吗?
4 楼
keyman [专家分:0] 发布于 2010-06-05 10:34:00
数据类型转换?
也就是说先定义成real(8)吗,再转成自己需要的?
real(8) arr(3000,200)
integer(2) arrint(3000,200)
读出来arr后再arrint=arr
这样定义了arr后不是需要很多额外的空间吗?那我还不如直接用real(8)的类型了,不用转成integer(2)了,我根据需要定义不同类型的数组,就是想节约点空间。因为我的数据很大的。
我的问题实际是:读文件时,文件头记录了数据类型,我如何读取这个类型信息后,再定义相应类型的数据去读取文件下面的数据?如果定义类型不对,读数据就会不对吧。
5 楼
academician [专家分:40] 发布于 2010-06-05 14:17:00
你可以在程序前面先定义两个可变数组。
REAL*8 , ALLOCATABLE :: A(:)
INTEGER , ALLOCATABLE :: B(:)
这个时候是不分配数组空间的。
然后读你的文件头》
如果是整形就分配数组
ALLOCATE(B(个数))
如果是实型就分配数组
ALLOCATE(A(个数))
不知道这个答案是否满意
6 楼
keyman [专家分:0] 发布于 2010-06-05 19:43:00
非常感谢academician,这个方法非常好!
我来回复