arrays - 如何使用 Fortran 90 将一维数组的数据写入文件的下一列?
问题描述
基本上,我有许多一维数组需要写入同一个文件,但我需要将每个数组放在一个单独的列中,按照指定的顺序一个接一个。我会使用“do”循环,但某些数组的值可能比另一个数组多。是否有可以在写入语句中使用的格式,该格式将从下一列开始,而不是在上一列之后继续?
解决方案
基本上你想要一个'write'语句来确定它正在写入的值是否超出数组的上限,然后如果超过上限则写一个空白。一个格式不能处理这样的调查。我怀疑是否有您需要的快捷命令。一种方法是将数组转换为字符数组,如果超出数字数组的范围,请将其留空。下面是这个想法的实现。
module sub
contains
subroutine tovalue(num_array,dim,value_array)
implicit none
real*8,intent(in)::num_array(:)
integer,intent(in)::dim
character,intent(inout)::value_array*(*)(:,:)
integer::i,n
n = size(value_array,2)
do i=1,n
if (i<size(num_array)) then
write(value_array(dim,i),"(F6.1)") num_array(i)
else
write(value_array(dim,i),"(6X)")
end if
end do
end subroutine
end module
该子程序可以通过以下方式使用:
program test
use sub
implicit none
real*8::A(10),B(12),C(15)
integer::i,n
character,allocatable::values*6(:,:)
A = (/2,1,4,1,2,4,5,7,4,9/)
B = (/5,7,4,1,5,5,4,9,6,2,1,5/)
C = (/2,4,7,5,9,6,3,2,1,4,5,8,7,4,5/)
n = MAX(size(A),size(B),size(C))
allocate(values(3,n))
call tovalue(A,1,values)
call tovalue(B,2,values)
call tovalue(C,3,values)
print"(3A6)", values(:,1:n)
end program
推荐阅读
- flutter - 如何将flutter_web迁移到蜂鸟中颤动?
- reactjs - 为什么在测试中没有调用模拟函数?
- django - 带有千位分隔符的数字时 Django 模板转换错误
- android - 如何在 Kotlin 中使用 Timer.scheduleAtFixedRate
- react-native - 从警报消息导航到其他屏幕
- javascript - 将 CSS 类添加到下拉列表或容器
- android - 遍历arraylist并为数组列表中的每个项目显示警报对话框,然后在单击肯定按钮时移动到下一个项目
- android - 如何发布 url Kotlin
- c# - 如何检测.Net核心(C#)中持久内存映射文件的变化?
- c# - 如何续订Service Fabric无状态服务证书