我还想问一下,fortran中读入文件中的数组不知道长度,怎么读入啊!求助!
1个回答
展开全部
如果你的文件是二进制文件,那么你可以获得文件大小 size,然后除以每个数据的长度,比如4字节或8字节。既可得到数据量。
如果你的文件是文本文件,且每行的数据个数是固定的,每行的长度也是固定的。也可以参照上面的方法。
如果你的文件是文本文件,但每行的数据个数不确定,或者每行的长度不一致。
那么有办法知道文件的行数,或者每一行分别的数据个数。总的数组,需要你自己去统计行数,或者每一行的数据量加起来就是总的数据量。
大多数情况下,你只需要知道行数,就可以确定数据量了。下面的函数可以获得文件的行数。
Integer Function GetFileN( iFileUnit )
Implicit None
Integer , Intent( IN ) :: iFileUnit
Character*(1) :: cDummy
GetFileN = 0
Rewind( iFileUnit )
Do
Read( iFileUnit , * , End = 999 , Err = 999 ) cDummy
GetFileN = GetFileN + 1
End Do
999 Rewind( iFileUnit )
Return
End Function GetFileN
如果你的文件是文本文件,且每行的数据个数是固定的,每行的长度也是固定的。也可以参照上面的方法。
如果你的文件是文本文件,但每行的数据个数不确定,或者每行的长度不一致。
那么有办法知道文件的行数,或者每一行分别的数据个数。总的数组,需要你自己去统计行数,或者每一行的数据量加起来就是总的数据量。
大多数情况下,你只需要知道行数,就可以确定数据量了。下面的函数可以获得文件的行数。
Integer Function GetFileN( iFileUnit )
Implicit None
Integer , Intent( IN ) :: iFileUnit
Character*(1) :: cDummy
GetFileN = 0
Rewind( iFileUnit )
Do
Read( iFileUnit , * , End = 999 , Err = 999 ) cDummy
GetFileN = GetFileN + 1
End Do
999 Rewind( iFileUnit )
Return
End Function GetFileN
更多追问追答
追答
有空格是正常的。空格表示数据的间隔。没空格反而不容易读。
你的数据麻烦在,有 / ,有 //////。
我不知道这样的数据格式意味着什么。你打算在数据处理时,如何对待这样的 ////// ?
这样不规则的数据,你打算读成一维数组,还是二维数组?
这决定了如何读取它们。
你有至少两种选择:
使用记事本或其他软件的替换功能。把 / 替换成空格。然后读起来就容易多了。
把数据按照行,每行按照字符串读入。然后分析其中的 / ,进行判断后读入。这样的方法会比较麻烦。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询