0

我需要编写一个可以读取和打印 .dat 文件的 Fortran 程序。

(文件 homework_6.dat 包含书籍记录:名称(最多 25 个字符)、出版年份(4 位整数)、价格(6 位实数)、ISBN(13 位整数)。编写程序读取文件(homework_6. dat)并按以下格式打印(在屏幕上或到另一个文件中)详细信息:

                                     Publish   
          Name                        Year    ($)        ISBN
       -------------------------      ----   ------     -------------
       Principles of Combustion       2005    107.61     9780471046899
       An Introduction to Comb        2011    193.99     9780073380193 
       Guide to Fortran               2009     71.95     9781848825420
       Modern Fortran Explain         2011    100.00     9780199601417
       Introduction to Program        2012    200.00     9780857292322)

这是我写的

program dat
implicit none
character (len=25) :: Name
integer :: i, publish_year, ISBN
real :: price 
open(unit=7, file="homework_6.dat", status="old", action="readwrite")
do i=1, 10
read (unit=7,fmt="(a25,i4,f3.2,i13)") Name, publish_year, price, ISBN
write (unit=7,fmt="(a25,i4,f3.2,i13)") Name, publish_year, price, ISBN
end do
close(unit=7)
end program dat

但是 Fortran 说第 8 行有错误

我不知道该怎么办 :(

索尼娅(国际电联)

- 编辑 -

所以我尝试编写一个程序,但执行后我仍然有错误

program dat
    implicit none
    character (len=25) :: Name
    character (len=13) :: ISBN
    integer :: i, publish_year
    real :: price 
    open(unit=10, file="homework_6.dat", status="old", action="readwrite")
    open(unit=11, file="output_hw6.dat")
    !Comment: these below 3 lines are for skipping 3 heading your input
    read(10,*)
    read(10,*)
    read(10,*)
    do i=1, 10
    read (10,*) Name, publish_year, price, ISBN
    write (11,1) Name, publish_year, price, ISBN
    1 format(a25,2x,i4,2x,f3.2,2x,a13)
    end do
    close(unit=10)
    end program dat

我在第 14 行有一个错误。错误 52,字段 DAT 中的无效字符 - 在第 14 行的文件 homework.f95 中 [+01b3]

4

2 回答 2

1

您正在使用列表定向格式阅读,但这不起作用。书名中有空格,编译器不会找到它的结束位置以及年份的开始位置。

您必须使用格式。提示:在读取语句中使用格式字符串,而不是带有标签的格式语句。格式将类似于您的输出格式。

另一个提示,您的价格输出格式太短。我推荐f6.2。

于 2013-01-07T15:52:02.100 回答
0

在第 8 行将 unit=7 替换为 7。但问题是您正在从 homework_6.dat 读取并写入同一个文件。您可以在屏幕上打开新文件或输出。我已修改您的代码以从您显示的数据文件中读取,假设它在数据之前有 3 行标题。

    program dat
    implicit none
    character (len=25) :: Name
    integer :: i, publish_year, ISBN
    real :: price 
    open(unit=7, file="homework_6.dat", status="old", action="readwrite")
    open(unit=8, file="output_hw6.dat")
    !Comment: these below 3 lines are for skipping 3 heading your input                 
    read(7,*)
    read(7,*)
    read(7,*)
    do i=1, 10
    read (7,*) Name, publish_year, price, ISBN
    write (8,1) Name, publish_year, price, ISBN
    1 format(a25,2x,i4,2x,f3.2,2x,i13)
    end do
    close(unit=7)
    end program dat

您的硬件问题可以通过咨询任何初学者的 Fortran 书籍来轻松解决。

于 2013-01-04T21:08:37.253 回答