让我先说一下我的问题,说我完全没有资格在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,如果这有任何区别。
答案 0 :(得分:1)
基本问题是格式1和格式6的字段宽度不同。在格式1中,您有3倍的间距和长度为16的字符串(标签)。除了一个是A30。在格式6中,用于值,您有3个空格,数字项的字段具有不同的长度,如17,20或15.如果您使每个数字格式项16长,除了第3项,那么事情应排队。
通过用隐含的do循环替换33个单独索引的值来更容易读取第一个写:(ksym(i),i = 1,33)。不妨使用数组功能而不是写出所有这些东西!
答案 1 :(得分: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
(未测试的)