【问题标题】:Fortran: Writing and Reading Formatted FilesFortran:写入和读取格式化文件
【发布时间】:2015-03-27 18:48:25
【问题描述】:

我有一个浮点数数组,想将值写入文件。然后把它们读回来。

我正在按如下方式写入文件

Do k = 1, nk
  Do j = 1, nj
    Write (u,*) (lec(i,j,k), i = 1, ni)
  End Do
End Do

这会在以下情况下写入数字 ni = 5nj = 4nk = 2

1.1 1.2 1.3 1.4 1.5    
2.1 2.2 2.3 2.4 2.5
3.1 3.2 3.3 3.4 3.5
4.1 4.2 4.3 4.4 4.5
1.1 1.2 1.3 1.4 1.5    
2.1 2.2 2.3 2.4 2.5
3.1 3.2 3.3 3.4 3.5
4.1 4.2 4.3 4.4 4.5

我想通过以下方式改变输出文件的格式

lec: 1.1 1.2 1.3 1.4 1.5    
+ 2.1 2.2 2.3 2.4 2.5
+ 3.1 3.2 3.3 3.4 3.5
+ 4.1 4.2 4.3 4.4 4.5
+ 1.1 1.2 1.3 1.4 1.5    
+ 2.1 2.2 2.3 2.4 2.5
+ 3.1 3.2 3.3 3.4 3.5
+ 4.1 4.2 4.3 4.4 4.5

如何修改代码以获得这种形式的输出?

我以相同的方式读取内容,但仅当我在文件中遇到键 lec: 时才读取 lec 中的值。

【问题讨论】:

    标签: file fortran


    【解决方案1】:
     Do k = 1, nk
       Do j = 1, nj
         if(k.eq.1.and.j.eq.1)then
           write(u,'(a)',advance='no')'lec:'
         else
           write(u,'(a)',advance='no')'+'
         endif
         Write (u,*) (lec(i,j,k), i = 1, ni)
       End Do
      End Do
    

     Do k = 1, nk
       Do j = 1, nj
         if(k.eq.1.and.j.eq.1)then
           write(u,'(a,99f4.1))'lec:',(lec(i,j,k), i = 1, ni)
         else
           write(u,'(a,99f4.1)')'+',(lec(i,j,k), i = 1, ni)
         endif      
       End Do
      End Do
    

    99 可以是大于ni* 的任何数字(如果您的编译器支持)。

    【讨论】:

    • 请注意,* 需要额外的一组 ()
    • 现在我必须阅读文件并填写lec。但是,当我在文件中遇到lec: 并继续读取以+ 开头的剩余行时,我只会填充数组。然后在到达空行或遇到另一个键(例如Newkey:)时停止。
    • 您需要将每一行作为字符串读取,检查关键标签并在内部读取其余部分。这并不难,但我想知道你为什么发明了一种不太好读/写的文件格式。
    • @francescalus 这些天我的系统管理员将升级我的编译器,这样我就可以实际测试了!!
    • 一个问题是行可能非常长,并且必须有一个非常长的字符串
    猜你喜欢
    • 2012-12-29
    • 2013-02-14
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2017-10-22
    • 2013-08-13
    • 2014-06-12
    • 2013-09-04
    相关资源
    最近更新 更多