我有一个包含500个数字的列表,并且想要连续取每10个数字的平均值,从而创建一个包含50个数据点的输出文件。然后将对其进行进一步绘制。
但是假设在10个间隔中所有10个数据都丢失了,即空白,那么我应该能够在输出文件中相应地写入空白。但是,如果我的输出数组是实型,则不能将其写为空白字符。
我什至试图将输出数组创建为字符类型,但是,这显示了无法将实际值写入字符类型变量的问题。
我的问题有两点:-
有什么方法可以将实变量存储为空白?
或者,如何将实数值存储到字符类型变量中?
我尝试了以下代码进行测试:-
real r
r=''
write(*,*) r
输出'r'代替一些实际值。
对于有人建议我将输出直接写入文件的情况,我必须告诉我,我需要该输出数组,以便对其进行进一步的处理。
答案 0 :(得分:2)
Fortran实数始终是一个数字,通常是IEEE浮点格式https://en.wikipedia.org/wiki/IEEE_754。有一些特殊值,例如非数字(NaN)和+-无穷大(+ Inf,-Inf),但它们也不会输出为空白。
如果我对它的理解正确,那么您基本上想要某种Option type。
您必须检查数字是否包含此特殊值,并在这种情况下输出空白
if (ieee_is_nan(r)) then
write(*,*)
else
write (*,*) r
end if
否则您将不得不使用一些更复杂的类型
type my_type
real value
logical is_blank =.false.
end type
否则您将不得不使用可分配的实变量,并且如果它为空则不分配它
if (.not. allocated(r)) then
write(*,*)
else
write (*,*) r
end if