回 帖 发 新 帖 刷新版面

主题:[讨论]关于fortran读取各行长度不一格式

我有一个文件格式如下:
       30          5
       20          6
       31
      550
CDP     TVRMS
^@^@^@^@^@^@^@^@
      0.0
        0
        0
        0
        0
       1
       13
     1624
        0
        0
        0
        0
        0
        0
        0
        0
        0
        0
        0
        0
   6052.0        1460.0
   7036.0        1669.0
   7880.0        1821.0
   8736.0        2198.0
   8980.0        2337.0
 20364.0        7487.0
  20404.0        7430.0
        1
       21
     1944
        0
        0
        0
        0
        0
   5904.0        1599.0
   5996.0        1599.0
   7488.0        1729.0
   7880.0        1821.0
   7940.0        1839.0
   8908.0        2247.0
   8980.0        2259.0
   9088.0        2327.0
       1
       16
     2584
        0
        0
        0
        0
        0
        0
        0
        0
        0
        0
        0
        0
   6028.0        1480.0
   6076.0        1480.0
   7568.0        1739.0
   7880.0        1821.0
   8752.0        2158.0
   8784.0        2138.0
     。。。。。。

这个文件很长,现在我需要对两列的数据进行数学操作,其余部分保持不变,请各位支招

回复列表 (共5个回复)

沙发

操作一个文件需要提供很多信息。

这个文件的格式是否固定的?

一个数据的行数与两个数据的行数是否都固定?

你需要操作的是两个数据的行,那么一个数据的行是否跳过?忽略?

你所谓的操作是指,读出来。还是包含写进去?

板凳

我这里有个函数,可以获得一个字符内的数据个数。

比如

[quote]write(*,*) '共有',GetDataN("1 2 3.0 '4' 5"),'个数据'[/quote]

[quote]
Integer Function GetDataN( cStr )

  Character( Len = * ) , Intent( IN ) :: cStr

  Integer :: i

  Logical :: bIsSeparator , bIsQuote

  GetDataN = 0

  bIsSeparator = .TRUE.

  bIsQuote = .FALSE.

  Do i = 1 , Len_Trim( cStr )

    Select Case( cStr(i:i) )

    Case( '"' , "'" ) !// 如果遇到引号

      If ( .Not.bIsQuote ) GetDataN = GetDataN + 1  !//如果不在引号中,则增加一个数据

      bIsQuote = .Not.bIsQuote !// 引号结束或开始

      bIsSeparator = .FALSE.

    Case( " " , "," , char(9) ) !// 如果遇到分隔符

      If ( .Not.bIsQuote ) then  !// 分隔符如果不在引号中

        bIsSeparator = .TRUE.

      End If

    Case Default      

      If ( bIsSeparator ) then

        GetDataN = GetDataN + 1

      End If

      bIsSeparator = .FALSE.

    End Select

  End Do

End Function GetDataN[/quote]

3 楼


文件中一个数据的行和两个数据的行数不固定,是随机行数。一个数据的行可以跳过不做任何操作,我现在要做的就是修改两个数据的行,谢谢

4 楼

你用我给你的函数判断一下就行了。

如果是两列的,就读取,否则就跳过。

5 楼

怎么是乱码?I HAVE DONE IT。thank you

我来回复

您尚未登录,请登录后再回复。点此登录或注册