在Fortran中显示具有两列的表以及可用数据
我有两个变量,分别是在Fortran中显示具有两列的表以及可用数据,fortran,Fortran,我有两个变量,分别是x和y,它们都有大约60个点(基本上是x和y绘图轴的值)。现在,当我尝试在结果文件中以列或表格的形式显示它时,带有x值和相应的y值,我最后在两列中显示所有x值,然后是y值。我无法正确地把它取出来 这是代码的一小部分 xpts = PIC1(1,6:NYPIX,1) ypts = PIC1(2,6:NYPIX,1) write(21,*), NYPIX write(21,"(T2,F10.4: T60,F10.4)"), xpts, ypts 这是我得到的输出。x值从列1继续
x
和y
,它们都有大约60个点(基本上是x
和y
绘图轴的值)。现在,当我尝试在结果文件中以列或表格的形式显示它时,带有x
值和相应的y
值,我最后在两列中显示所有x
值,然后是y
值。我无法正确地把它取出来
这是代码的一小部分
xpts = PIC1(1,6:NYPIX,1)
ypts = PIC1(2,6:NYPIX,1)
write(21,*), NYPIX
write(21,"(T2,F10.4: T60,F10.4)"), xpts, ypts
这是我得到的输出。x
值从列1
继续到2
,直到全部显示,然后显示y
值
128.7018 128.7042
128.7066 128.7089
128.7113 128.7137
128.7160 128.7184
128.7207 128.7231
128.7255 128.7278
128.7302 128.7325
128.7349 128.7373
128.7396 128.7420
128.7444 128.7467
128.7491 128.7514
128.7538 128.7562
128.7585 128.7609
128.7633 128.7656
128.7680 128.7703
128.7727 128.7751
128.7774 128.7798
128.7822 128.7845
128.7869 128.7892
128.7916 128.7940
128.7963 128.7987
128.8011 128.8034
86.7117 86.7036
86.6760 86.6946
86.6317 86.6467
86.6784 86.8192
86.8634 87.0909
87.2584 87.6427
88.1245 88.8343
89.5275 90.2652
91.0958 91.8668
92.6358 93.2986
93.8727 94.4631
您可以使用
do
循环:
do i=1,size(xpts)
write(21,"(T2,F10.4: T60,F10.4)"), xpts(i), ypts(i)
enddo
您可以使用
do
循环:
do i=1,size(xpts)
write(21,"(T2,F10.4: T60,F10.4)"), xpts(i), ypts(i)
enddo
已经有人说如何获得想要的输出。不过,明确地说出问题中(不需要的)输出产生的原因可能是好的
在(广义)语句中
write(unit,fmt) xpts, ypts
xpts,ypts
是输出列表。在关于如何处理输出列表的描述中,我们看到了(Fortran 2008 9.6.3)
如果数组显示为输入/输出列表项,则会将其视为按数组元素顺序指定元素(如果有)
也就是说,假设xpts
和ypts
的下限是1
,这也就不足为奇了
给出所看到的输出
使用扩展为的do循环
write(unit, fmt) xpts(1), ypts(1)
write(unit, fmt) xpts(2), ypts(2)
...
这正是我们想要的。但是,更一般的“给我交错数组的元素”可以通过一个隐含do的输出来完成:
write(unit, fmt) (xpts(i), ypts(i), i=LBOUND(xpts,1),UBOUND(xpts,1))
(假设ypts
的上下限与xpts
相同)
这相当于
write(unit, fmt) xpts(1), ypts(1), xpts(2), ypts(2), ...
(为了方便起见,再次切换到关于下限的假设)
在某些情况下,这意味着do可能更自然。特别注意,第一个显式do循环为xpts
和ypts
中的每对元素写入一条记录;对于隐含的do,新记录来自格式反转。对于问题中的格式,两者是等价的,但是对于一些更奇特的格式,前者可能不是所需要的,并且它将do循环的结构与格式联系起来
这种记录拆分对于未格式化的输出(没有格式反转)更为有效。已经有人说如何获得想要的输出。不过,明确地说出问题中(不需要的)输出产生的原因可能是好的
在(广义)语句中
write(unit,fmt) xpts, ypts
xpts,ypts
是输出列表。在关于如何处理输出列表的描述中,我们看到了(Fortran 2008 9.6.3)
如果数组显示为输入/输出列表项,则会将其视为按数组元素顺序指定元素(如果有)
也就是说,假设xpts
和ypts
的下限是1
,这也就不足为奇了
给出所看到的输出
使用扩展为的do循环
write(unit, fmt) xpts(1), ypts(1)
write(unit, fmt) xpts(2), ypts(2)
...
这正是我们想要的。但是,更一般的“给我交错数组的元素”可以通过一个隐含do的输出来完成:
write(unit, fmt) (xpts(i), ypts(i), i=LBOUND(xpts,1),UBOUND(xpts,1))
(假设ypts
的上下限与xpts
相同)
这相当于
write(unit, fmt) xpts(1), ypts(1), xpts(2), ypts(2), ...
(为了方便起见,再次切换到关于下限的假设)
在某些情况下,这意味着do可能更自然。特别注意,第一个显式do循环为xpts
和ypts
中的每对元素写入一条记录;对于隐含的do,新记录来自格式反转。对于问题中的格式,两者是等价的,但是对于一些更奇特的格式,前者可能不是所需要的,并且它将do循环的结构与格式联系起来
这种记录拆分对于未格式化的输出(没有格式反转)更为有效。谢谢。这确实很有帮助。对不起,我对这个网站有点陌生,所以我不确定我在做什么。但是没有,你的回答真的很有帮助,我用这个来启动并运行输出。干杯
:
在F10.4
之后做什么?谢谢。这确实很有帮助。对不起,我对这个网站有点陌生,所以我不确定我在做什么。但是没有,你的回答真的很有帮助,我用这个来启动并运行输出。干杯:
在F10.4
之后做什么?