我有两个变量说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
答案 0 :(得分:4)
您可以使用do
循环:
do i=1,size(xpts)
write(21,"(T2,F10.4: T60,F10.4)"), xpts(i), ypts(i)
enddo
答案 1 :(得分:1)
已经an answer说了如何获得所需的输出。但是,明确说明为什么问题中出现(不需要的)输出可能会很好。
在(通用)陈述中
write(unit,fmt) xpts, ypts
xpts, ypts
是输出列表。在如何处理输出列表的描述中,我们看到(Fortran 2008 9.6.3)
如果数组显示为输入/输出列表项,则将其视为元素(如果有)以数组元素顺序指定
也就是说,假设xpts
和ypts
的下限为1
write(unit, fmt) xpts(1), xpts(2), xpts(3), ..., ypts(1), ypts(2), ...
给出了输出。
使用扩展为
的do循环write(unit, fmt) xpts(1), ypts(1)
write(unit, fmt) xpts(2), ypts(2)
...
确实是这里想要的。但是,更通用的“给我交错的数组元素”可以用输出暗示来完成:
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循环为xpts
和ypts
的每对元素写入一条记录;对于暗示,新记录来自格式回复。这两个问题中的格式是等价的,但对于一些更奇特的格式,前者可能不是想要的,它将do循环的结构与格式联系起来。
对于未格式化的输出(没有格式化版本反转),这种记录拆分更为重要。