2

让我先说我完全没有资格在 Fortran 77 中工作,但是我在这里,我正在学习我能做的事情。

我正在从事一个涉及在不同条件下对火焰属性进行建模的项目。在这里,我有一个片段输出表中的第一行,为相应列下方的行提供标签。(KSYM 是一个字符串数组,用于标记存在的不同化合物)

   WRITE(LOUT,1) "Standoff(cm)", "Density(g/cm3)", 
 +  "HeatReleaseRate(erg/cm3/s)","Temperature(K)",
 +  KSYM(1),KSYM(2),KSYM(3),KSYM(4),KSYM(5),KSYM(6),KSYM(7),
 +  KSYM(8),KSYM(9),KSYM(10),KSYM(11),KSYM(12),KSYM(13),KSYM(14),
 +  KSYM(15),KSYM(16),KSYM(17),KSYM(18),KSYM(19),KSYM(20),
 +  KSYM(21),KSYM(22),KSYM(23),KSYM(24),KSYM(25),KSYM(26),
 +  KSYM(27),KSYM(28),KSYM(29),KSYM(30),KSYM(31),KSYM(32),
 +  KSYM(33)

然后稍后在每个对峙间隔的循环中

    WRITE(LOUT,6) X(J),F(J),HR(J),(SN(N,J), N=1,NATJ-1)

这是格式:

 1     FORMAT(A16,3X,A16,3X,A30,3X,A16,3X,80(A16,3X))
 2     FORMAT(I10)
 3     FORMAT(3(I10,3X))
 4     FORMAT(3(E17.7,3X))
 5     FORMAT(80(E17.7,3X))
 6     FORMAT(F17.7,3X,F17.7,3X,F20.7,3X,80(E15.5,3X))

我的问题是数据出来后,第一行中的标签及其相应的列在前几列之后没有保持对齐,因此难以阅读和操作。

我能想到的两种可能的解决方案: 1. 要么使用“T”格式描述符来制作绝对列 2. 忽略立即可读性的问题,在每个条目后插入逗号或半逗号,然后在 Excel 中以 . CSV 文件

由于我最终要绘制数据图表,我不妨选择选项 2。我尝试在第一个代码片段的每个条目之间添加“,”,但我一直收到语法错误,所以我我假设我做错了什么。

编辑:

为了测试想法 2,我在每个条目之间添加了“,”。

       WRITE(LOUT,*) 'Name',KSYM(1),';',KSYM(2),';',KSYM(3),';',
 +  KSYM(4),';',KSYM(5),';',KSYM(6),';',KSYM(7),';',KSYM(8),';',
 +  KSYM(9),';',KSYM(10),';',KSYM(11),';',KSYM(12),';',
 +  KSYM(13),';',KSYM(14),';',KSYM(15),';',KSYM(16),';',
 +  KSYM(17),';',KSYM(18),';',KSYM(19),';',KSYM(20),';',
 +  KSYM(21),';',KSYM(22),';',KSYM(23),';',KSYM(24),';',
 +  KSYM(25),';',KSYM(26),';',KSYM(27),';',KSYM(28),';',
 +  KSYM(29),';',KSYM(30),';',KSYM(31),';',KSYM(32),';',
 +  KSYM(33)

但与以前相同的语法错误。如果这有什么不同,我正在使用一个特殊的编译器 pgf77。

4

2 回答 2

1

基本问题是格式 1 和 6 中的字段宽度不同。在格式 1 中,您有 3X 的间距和长度为 16 的字符串(标签)。除了一个是 A30。在用于值的格式 6 中,您有 3 的空格,以及具有不同长度(例如 17、20 或 15)的数字项的字段。如果您使每个数字格式项的长度为 16,除了第 3 项,那么事情应该排队。

通过用隐含的 do-loop 替换数组的 33 个单独索引值,第一次写入会更容易阅读:(ksym (i), i=1,33)。还不如使用数组特性而不是把所有的东西都写出来!

于 2011-04-25T21:08:06.333 回答
0

格式语句在很大程度上与 CSV 等可变宽度输出不兼容。相反,只需使用列表导向的输出:

    write (LOUT,*) 'Standoff(cm), Density(g/cm3), HeatReleaseRate(erg/cm3/s), Temperature(K)'

    do 101 i=1,n
    write (LOUT,*) X(J), ',', F(J), ',', HR(J), ',', (SN(N,J), ',', N=1,NATJ-1)
101 continue

(未经测试)

于 2011-04-25T19:49:35.080 回答