在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
之后做什么?