2015-02-24 61 views
1

我有两个变量,分别为xy,它们都有大约60个点(基本上是图中xy轴的值)。现在,当我尝试以结果文件的形式在结果文件中以x值和相应的y值显示结果文件时,我最终得出的结果是所有x值都显示在两列中,然后是y值。我无法正确解决问题。在Fortran中显示带有两列的表格和可用数据

这是代码

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 

回答

3

你可以使用一个do循环:

do i=1,size(xpts) 
    write(21,"(T2,F10.4: T60,F10.4)"), xpts(i), ypts(i) 
enddo 
+0

谢谢。这确实有帮助。 – 2015-02-24 12:36:47

+0

对不起,我对这个网站有点陌生,所以我不确定我在做什么。但是,没有你的答案是真正有用的,我用这个得到了输出。干杯 – 2015-03-10 09:37:19

0

已经有an answer说如何让输出通缉。但是,明确地说出为什么(不想要的)输出会出现在问题中可能会很好。

在(广义)声明

write(unit,fmt) xpts, ypts 

xpts, ypts是输出列表。在描述如何处理输出列表的过程中(Fortran 2008 9.6.3)

如果数组显示为输入/输出列表项,则将它看作是指定了元素(如果有)在数组元素顺序

也就是说,它不应该太令人惊讶的是(假设该下限的xptsypts1

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) 
... 

确实正是在这里想要的。然而,更一般的“给我交织的数组的元素”可能与输出隐含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循环为每个从xptsypts的元素对写入一个记录;对于隐含的做法,新的记录来自格式回复。这两个格式在问题上是等价的,但对于一些更奇特的格式,前者可能不是想要的格式,它将do循环的结构与格式绑定在一起。

对于未格式化的输出(没有格式回复),记录的这种分割更是如此。

相关问题