主题:求助!!!怎样确定一个文件里的数据是几行几列?
yansx
[专家分:0] 发布于 2012-09-21 15:50:00
现在编程遇到一个问题,在读一个数据文件(txt)的时候,怎么确定这个文件里面的数据是几行几列的?请大侠们指点
回复列表 (共3个回复)
沙发
wangxinling [专家分:0] 发布于 2012-09-21 19:23:00
我也是初学者,个人认为,既然有数据,看看不就知道行列了吗?或许你的数据太复杂。
板凳
11hours [专家分:0] 发布于 2012-09-28 10:14:00
全部读进来,size一下看看总数,除以行数就是列数。
3 楼
臭石头雪球 [专家分:23030] 发布于 2012-09-28 11:12:00
[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
注意,以上代码要替换单引号为半角单引号(因为有了单引号帖子发不出来)
我来回复