博文

【原创】关于fortran读取各行长度不一格式不一具体行数不知数据文件(2009-12-06 09:21:00)

摘要:iwanfly网友曾在一段时间前发过贴探讨过这个问题http://bbs.pfan.cn/post-312402.html当时思路不是很清晰现思考结果如下,虽然比较麻烦,但最终还是解决了读取数据的问题,前提是知道每行最大的数据个数,比如7个。不知道论坛上的网友是否有更好的方法,不吝赐教。测试数据如下:12  89  7712  999 878  777398 789 765 98 76578 8912  89  7712  999 878  777398 789 765 98 765。。。。总共78144行。大概需要5,6秒时间把数据全部读进。program mainimplicit noneinteger,allocatable :: int_array(:,:),temp_array(:,:)integer :: count,length,step,i,ierrcharacter*256 :: str_one_recordopen(100,file='data.txt')count=0step=100000length=stepallocate(int_array(length,7))int_array=0do while(.not. eof(100))    count=count+1    loop1:  do i=7,1,-1          read(100,'(A)',advance='no',eor=168) str_one_record168       read(str_one_record,*,......

阅读全文(4329) | 评论:0

【原创】计算100和10000的阶乘(2009-12-05 08:24:00)

摘要:方法一: program mainimplicit nonereal*8 :: Rfact100integer,allocatable :: main_digits(:),sub_digits(:,:)integer :: num_digitsinteger :: i,j!先用双精度数算出100!,有效位数只有15位Rfact100=1.0d0do i=1,100  Rfact100=Rfact100*dble(i)end do!求得100阶乘有多少位数字,包括低位上的0num_digits=dlog10(Rfact100)+1!分配一个数组,数组每个元素代表一个数字allocate(main_digits(num_digits),sub_digits(num_digits,3))!赋初值main_digits=0main_digits(1)=1do i=2,100  !每一位数字都乘以i,每个数都不会超过900,所以最多3位数字  main_digits=main_digits*i  !分解每位数,进位处理  do j=1,num_digits    call int2digits(main_digits(j),sub_digits(j,:))    if(j<=num_digits-2) then      main_digits(j)=sub_digits(j,1)      main_digits(j+1)=main_digits(j+1)+sub_digits(j,2)      main_digits(j+2)=main_digits(j+2)+sub_digits(j,3)    else&nb......

阅读全文(2468) | 评论:1