回 帖 发 新 帖 刷新版面

主题:[讨论]大家看看我的这个fortran读取程序有什么问题?

在统计分析中,常常会遇到带有标题的数据文件,例如
        Name     Sex  Age  Height   Weight
        Alice     F    13    56.5    84.0
        Becka     F    13    65.3    98.0
        Gail      F    14    64.3    90.0
        Karen     F    12    56.3    77.0
        Kathy     F    12    59.8    84.5
        Mary      F    15    66.5   112.0
记该数据为test.txt(当然实际中可能有更多的行和列)
这在统计软件R中很好实现
>mydata<-read.table("test.txt", head=TRUE)
>mydata
        Alice     F    13    56.5    84.0
        Becka     F    13    65.3    98.0
        Gail      F    14    64.3    90.0
        Karen     F    12    56.3    77.0
        Kathy     F    12    59.8    84.5
        Mary      F    15    66.5   112.0
由于R和matlab一样是解释性的语言,当数据量很大的时候效率可能不如fortran和C等编译性语言,故希望
用fortran做同样的工作,只因为fortran的简洁性和可靠性。
我在网上找到http://zhidao.baidu.com/question/210249438.html
按照网上资料的提示我做了以下工作
新建了一个数据文件file1.txt,内容如下
it's amazing ,so amazing 
I want to know the ideal measure, 
but it's ungelivable 
 1     1.37827E+03    -10.9404E+03     1.57338E+03
 2     7.37253E+03    -59.6376E+03     9.32621E+03
 3    -28.0707E+03     28.1755E+03    -9.80144E+03
再按照网上资料的提示我在IVF上写了个fortran90的程序

CHARACTER(len=1000)  :: C
real,dimension(12)    ::A !!因为数据有3行12个数字
INTEGER  I,J

open(10,file='file1.txt')
DO I=1,3   ! 前面有几行文字就循环到几
    READ(10,*) C
ENDDO

open(11,file='file2.txt')
DO J=1,size(A) 
      READ(10,*) A !!读数据
      WRITE(11,*)A !!写数据
ENDDO

END
这个程序在运行过程中说我的程序触发了一个断点,我将该问题忽略继续运行,得到file2.txt,里面只含有
数值数据,没有了字符数据,内容如下:
1.000000       1378.270      -10940.40       1573.380       2.000000    
   7372.530      -59637.60       9326.210       3.000000      -28070.70    
   28175.50      -9801.440    
虽然勉强还行,可是我还是不满意,原因有2
1,运行不流畅,出现了断点
2,输出的数据格式不符合期望,我原本想得到
 1     1.37827E+03    -10.9404E+03     1.57338E+03
 2     7.37253E+03    -59.6376E+03     9.32621E+03
 3    -28.0707E+03     28.1755E+03    -9.80144E+03

学生我初来乍到,还望大虾们给点意见神马的,先谢谢大家了!

回复列表 (共2个回复)

沙发


这种数据我没用过,勉强编了一个,试下吧。表头处理的不太好,输出格式也没有仔细调,反正大体意思就是用fortran中的derived type,你可以去查下书:
program test
            implicit none
            type pesonal_information
                        character(len=10) :: name
                        logical                    :: sex
                        integer                   :: age
                        real(4)                   :: height
                        real(4)                   :: weight
            end type pesonal_information
            type biaotou
                        character(len=10) :: b1,b2,b3,b4,b5
            end type biaotou
            type( biaotou )                      :: c
            type( pesonal_information) :: a(6)
            integer                 :: i

            open(unit=10,file='file1.txt')
            read(10,*) c
            do i = 1, 6
                        read(10,*) a(i)
            enddo
            print 10,c
            print 20,a
            10 format(5A)
            20 format(A,L,I10,F13.2,F11.2)
end program test

文件   file1.txt:(每行前面没有空格)
Name     Sex  Age  Height   Weight
Alice     F    13    56.5    84.0
Becka     F    13    65.3    98.0
Gail      F    14    64.3    90.0
Karen     F    12    56.3    77.0
Kathy     F    12    59.8    84.5
Mary      F    15    66.5   112.0

板凳


运行通过,完美!非常感谢!下一步我提取每一列做统计分析,比如提取身高做回归等等

我来回复

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