我在Fortran中有一个程序将结果保存到文件中.目前我使用打开文件
OPEN (1, FILE = 'Output.TXT')
Run Code Online (Sandbox Code Playgroud)
不过,我现在想运行一个循环,每次迭代的结果保存到文件'Output1.TXT','Output2.TXT','Output3.TXT',等等.
在Fortran中有一种简单的方法可以从循环计数器构造文件名i吗?
我在阅读声明方面遇到了麻烦.我更喜欢Fortran90,但如果它有帮助,其他版本可能是可能的.我在文件中有一堆数据,可以描述为:
这是一个例子:
maxele/OS1_HC_LF_A_0001_004_maxele.63 4.22E-03 9.00E-01 1.00E-06 1 -999 -999 -999
maxele/OS1_Inl_A_0001_005_maxele.63 2.11E-03 9.00E-01 1.00E-06 3 -999 -999 -999
maxele/OS1_HC_LF_C_0001_009_maxele.63 1.56E-03 9.00E-01 1.00E-06 2 58.77 -82.82 28.91
maxele/OS1_TS_B_0001_006_maxele.63 3.90E-03 9.00E-01 1.00E-06 1 -999 -999 -999
Run Code Online (Sandbox Code Playgroud)
我已经了解到如果遇到无格式读取的斜杠(/)字符,Fortran将停止读取语句,因此我必须使用格式说明符.并且由于字符串长度未知,我不确定如何确保字符串读取在第一个空格处停止.我相信它可以在整行中阅读,然后再进行解析,但这看起来很复杂.有没有办法强迫它将数据视为空格分隔?提前致谢.
我是 Fortran 新手。所以我需要帮助。我在 SUSE 上使用 gfortran 编译我的代码并收到以下错误:
200 IF ( ID .EQ. 4HEOT ) GO TO 20
1
Error: Operands of logical operator '.eq.' at (1) are INTEGER(4)/HOLLERITH
Run Code Online (Sandbox Code Playgroud)
代码的主文件附加在下面的链接中,其中 1818 行显示了错误。
我的文件的链接是:https://files.engineering.com/getfile.aspx? folder=cd6961f3-d38b-4e61-a43d-269fa18c7d11&file=sfeng.f
如何解决这个问题?
对于简化/最小的示例,我在此处添加了代码:
SUBROUTINE CDRD ( II )
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c ohad 15/7/08
c IMPLICIT INTEGER*8 (I-N)
IMPLICIT INTEGER*4 (I-N)
C*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=C
C THIS SUBROUTINE READS PROPULSION SYSTEM DRAG DATA. C
C C
C USE NON-ZERO "II" TO WRITE TABLE DATA. C
C*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=C
CHARACTER*80 TITLE, CDFILE …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的Fortran代码,用于练习.它应该在一个范围内乘以数字.每次,生成的产品都会转换为字符串,因为我想查看它是否包含相同的数字.
我测试了将整数转换为字符串并键入字符串组件的方式,一切正常.然后,我需要比较字符串的组件,我使用string(number:number).但我无法让代码正确地执行此操作.
这是代码和输出:
program test
implicit none
character(10) myString
character(1) a,b,c,d,e,f
integer::i,j,k
do i=900,901,1
j=900
k=i*j
write(*,*)'k =', k
write(myString,'(i10)') k
write(*,*)'myString = ', myString
a=myString(1:1)
b=myString(2:2)
c=myString(3:3)
d=myString(4:4)
e=myString(5:5)
f=myString(6:6)
print*,a,b,c,d,e,f
if (d==f) then
print*,'hobla'
else
print*,'fobla'
end if
end do
stop
end program test
Run Code Online (Sandbox Code Playgroud)
所以我定义了字符:a,b,c,d,e,f来包含字符串的组成部分.并使用myString(i:i)定位每个组件并将其存储在字符a,b,c,d,e,f之一中.但似乎只有前两个工作正常,其余的都没有存储!
输出:
k = 810000
myString = 810000
81
fobla
k = 810900
myString = 810900
81
fobla
Run Code Online (Sandbox Code Playgroud)
注意事项81.这应该是第一次给810000,并打印"hobla".并第二次给810900并打印"fobla".但这没有发生!
任何人都可以告诉我如何让myString接受零作为字符?