“Fortran运行时错误:错误的实数” - 读取文件
问题描述:
我有以下8行ad 11列的外部文件。无论如何,这个文件不能改变。“Fortran运行时错误:错误的实数” - 读取文件
At line 14 of file test.f (unit = 100, file='SSL.dat')
Fortran runtime error: Bad real number in item 2 of list input
我想我需要:
Name Sun Jupiter Saturn Uranus Neptune EarthBC Mercury Venus Mars Pluto
mass(Msun) 1.000 9.547922048e-4 2.858857575e-4 4.366245355e-5 5.151391279e-5 3.040433607e-6 1.660477111e-7 2.448326284e-6 3.227778035e-7 6.607313077e-9
a(AU) 5.20219308 9.54531447 19.19247127 30.13430686 1.00000159 0.38709889 0.72332614 1.52364259 39.80634014
e 0.04891224 0.05409072 0.04723911 0.00734566 0.01669714 0.20563613 0.00676922 0.09330305 0.25439724
I(deg) 1.30376425 2.48750693 0.77193683 1.77045595 0.00090235 7.00457121 3.39460666 1.84908137 17.12113756
M(deg) 240.35086842 045.76754755 171.41809349 293.26102612 094.81131358 242.19484206 345.30814403 330.93171908 024.68081529
w(deg) 274.15634048 339.60245769 098.79773610 255.50375800 286.84104687 029.14401042 054.54948603 286.56509772 114.39445491
OMEGA(deg) 100.50994468 113.63306105 073.98592654 131.78208581 176.14784451 048.32221297 076.66204037 049.53656349 110.32482041
此文件由下面的程序。当我运行此程序FORTRAN90我得到以下信息,其编译正确
program readtable
implicit none
integer :: i, j, num_col, num_row
double precision, dimension (8,11) :: a
character(14), dimension (8) :: par
num_col = 4
num_row = 8
open(100,file='SSL.dat',status='old')
do j=1, num_row
read(100,*) par(j), (a(i,j), i=1,num_col)
end do
print *, par
print *, a(2,3) !Jupiter's Mass
end program
阅读做一个FORMAT()语句来帮助程序正确读取文件,但我似乎无法得到正确的格式。
答
由于agentp所说的列表在这里很好,你只需要说明前两行是不同的。我会这样做的(这里略有猜测 - 我不是100%相信我明白你想要什么):
[email protected] ~/test $ cat r.f90
Program readtable
Implicit None
Integer, Parameter :: wp = Selected_real_kind(13, 70)
Integer :: i, j, num_col, num_row
Real(wp) :: msun
Real(wp), Dimension (9,11) :: a
Character(14), Dimension (8) :: par
num_col = 9
num_row = 7
Open(100, file = 'SSL.dat', status = 'old')
Read(100, *)
j = 1
Read(100, *) par(j), msun, (a(i,j), i=1,num_col)
Do j = 2, num_row
Read(100,*) par(j), (a(i,j), i=1,num_col)
End Do
Write(*, *) par
Write(*, *) a(2,3) !Jupiter's Mass
End Program readtable
[email protected] ~/test $ gfortran -std=f2003 -Wall -Wextra -O -fcheck=all r.f90
[email protected] ~/test $ ./a.out
mass(Msun) a(AU) e I(deg) M(deg) w(deg) OMEGA(deg)
5.4090720000000002E-002
你可以尝试跳过标题行一次'read(100,* )par(1)'在循环之前。 –
试过了,不起作用。我甚至尝试跳过文件中的第一行,但没有任何结果 –
考虑提供示例数据文件以及代码,这将有助于提供帮助。 –