回 帖 发 新 帖 刷新版面

主题:求助!!!怎样确定一个文件里的数据是几行几列?

现在编程遇到一个问题,在读一个数据文件(txt)的时候,怎么确定这个文件里面的数据是几行几列的?请大侠们指点

回复列表 (共3个回复)

沙发


我也是初学者,个人认为,既然有数据,看看不就知道行列了吗?或许你的数据太复杂。

板凳

全部读进来,size一下看看总数,除以行数就是列数。

3 楼

[quote]  Integer Function GetFileN( iFileUnit )
    Implicit None
    Logical , Parameter :: bIsSunRiseFromEast = .True.
    Integer , Intent( IN ) :: iFileUnit
    Character*(1) :: cDummy
    GetFileN = 0
    Rewind( iFileUnit )
    Do While ( bIsSunRiseFromEast )
      Read( iFileUnit , * , End = 999 , Err = 999 ) cDummy
      GetFileN = GetFileN + 1
    End Do
999 Rewind( iFileUnit )
    Return
  End Function GetFileN [/quote]

以上函数用来获得文件行数。iFileUnit 是用顺序有格式打开的通道号

[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]

以上函数用来获得字符串里的数据个数(列数)。
需要自己在文件中读一行。
character(512) :: cStr
read( 12 , * ) cStr

注意,以上代码要替换单引号为半角单引号(因为有了单引号帖子发不出来)

我来回复

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