24小时热门版块排行榜    

查看: 647  |  回复: 1

yhwsmile

金虫 (小有名气)

[交流] 【求助】求助:帮忙看下这个程序是怎么转二进制的咯,谢谢啊 已有1人参与

麻烦各位帮忙看看,这是一个对数据进行简单加密后,对数据进行二进制转换,子程序write_hd就是转二进制,子程序xzen_ja是数据加密~~~~

fortran不能面向对象,我现在想把这个程序转成VB,现在我看不懂这个程序是怎么转二进制的,麻烦各位虫友帮忙看看~~~

图片1为station.txt
图片2为数据格式
CODE:
program data_conv
      integer ns
      integer,allocatable :: sta(:)
      character t_r*3,cst*5
      integer(kind=2) tm(367)
      integer ln,ld,i_dim,ieof
      character datdir*50,outdir*50,hisdir*50,logdir*50   !!!!资料目录,输出结果目录,阈值文件存储目录

          !!!!!!!读取目录文件
          open(10,file='config.txt',err=2050)
          read(10,'(12x,i4)',err=2050)ns
          read(10,'(12x,a50)',err=2050)datdir  !二进制文件的存储路径
          read(10,'(12x,a50)',err=2050)outdir
          read(10,'(12x,a50)',err=2050)hisdir
          read(10,'(12x,a50)',err=2050)logdir
          close(10)
          goto 90
2050  print*,'input the direct access is err, the run will stop'
      stop 9999

90    continue

    allocate(sta(ns))
      t_r='ctm'
open(110,file='station.txt')  !读文件名,只有站号。
do i=1,ns
read(110,*)sta(i)
enddo
close(110)
do ln=1,ns
       write(cst,'(i5)')sta(ln)
       tm=32766
       open(20,file='e:\extr\原始资料\hisctm\'//t_r//cst//'.dat',err=999)  !指示文本文件的路径
98     read(20,*,end=999)nsta,nya
       read(20,'(30i6)',end=999)(tm(ld),ld=1,366)
       ly=nya-1950
       ieof=6915
       call write_hd(t_r,sta(ln),ly,i_dim,tm,ieof,datdir)
       goto 98   
999   continue               
      close(20)
      enddo  !!!for do ln=1,ns  
      deallocate(sta)   
      
end program data_conv

subroutine write_hd(t_r,ist,irecs,i_dim,b0,ieof,wysm)
       parameter(nn=7)   !!!!定义需要处理的变量数
       integer(kind=2) b0(i_dim)
       integer ieof,ist,irecs
       character t_r*3,stat*5,ysm(nn)*3,ysf(nn)*7,wysm*50
       data ysm/'crd','crr','ctm','ctn','ctd','crs','cci'/
       data ysf/'hiscrd\','hiscrr\','hisctm\','hisctn\','hisctd\','hiscrs/','hiscci\'/
           integer len1
!!!!!!!crd08-08时降水量,crr20-20时降水量,ctm20-20时最高气温,ctn20-20时最低气温,ctd20-20时平均气温
      
    if(ieof/=6915)then
       ieof=-99
       print*,'您无权进行此操作,请联系管理员'
       return
       endif
      
       if(i_dim/=367)then
       ieof=-10
       print*,'资料数组长度错误,i_dim=   ',i_dim
       return
       endif
      
       if(i_dim==367)then
!!!!!!!判断当前需要写入的变量        
        do k=1,nn
        if(t_r==ysm(k))kk=k
        enddo
        
        do i=1,i_dim-1
        ix0=b0(i)
!!!!!!!对当前写入数据做简单的变换        
     if(t_r(1:2)=='cr') call xzen_ja(ist,i+5,ix0)
        if(t_r(1:2)=='ct') call xzen_ja(ist,i+10,ix0)
        b0(i)=ix0
        enddo
        b0(i_dim)=irecs+1950   !!!!!!数组最后一个值赋为年
        
!!!!!!!写数据文件
        write(stat,'(i5)')ist
        close(8)
                len1=len_trim(wysm)
        open(8,file=wysm(1:len1)//ysf(kk)//ysf(kk)//stat//'.dat',access='direct',recl=2*i_dim,err=99)

        write(8,rec=irecs,err=999)b0

        close(8)
        ieof=1
        return
        
       endif
      
99     ieof=0
       print*,'打开文件错误',wysm(1:len1),ysf(kk),ysm(kk),stat,'.dat'
       close(8)
       return
999    ieof=-2
       print*,'写入文件错误',wysm(1:len1),ysf(kk),ysm(kk),stat,'.dat'
       close(8)
       return
      
end subroutine write_hd

!!!!对输入的数值ix0做简单转换
subroutine xzen_ja(ist,i,ix0)
      integer ist,i,ix0
      integer maxx,mins
      
      maxx=30000
      mins=-9990
      is3=mod(ist,3)
      it3=mod(i,3)
      it5=mod(i,5)
      it7=mod(i,7)
      it11=mod(i,11)
      it13=mod(i,13)
      it17=mod(i,17)
      
      if(ix0mins)then
      if(is3==0)then
       if(it3==0)ix0=ix0+it5+it17+it13
       if(it3==1)ix0=ix0+it7+it17+it11
       if(it3==2)ix0=ix0+it5+it11+it13
      else
       if(it3==0)ix0=ix0+it7+it11+it13
       if(it3==1)ix0=ix0+it3+it13+it11
       if(it3==2)ix0=ix0+it5+it11+it17
      endif
      else
       ix0=ix0
      endif
      
      return
end subroutine xzen_ja




[ Last edited by nono2009 on 2010-11-11 at 07:26 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

引用回帖:
Originally posted by yhwsmile at 2010-09-29 09:40:37:
麻烦各位帮忙看看,这是一个对数据进行简单加密后,对数据进行二进制转换,子程序write_hd就是转二进制,子程序xzen_ja是数据加密~~~~

fortran不能面向对象,我现在想把这个程序转成VB,现在我看不懂这个程序是 ...

逐项相除法求余???
好好学习,天天向上。
2楼2010-11-09 19:49:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yhwsmile 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 国自科面上基金字体 +5 iwuli 2026-03-12 6/300 2026-03-16 13:13 by Kamiu_MK
[考研] 化学调剂0703 +7 啊我我的 2026-03-11 7/350 2026-03-15 23:03 by 凌千颂111
[考研] 梁成伟老师课题组欢迎你的加入 +6 一鸭鸭哟 2026-03-14 7/350 2026-03-15 22:12 by Winj1e
[考博] 东华理工大学化材专业26届硕士博士申请 +6 zlingli 2026-03-13 6/300 2026-03-15 20:00 by ryzcf
[考研] 294求调剂 +3 Zys010410@ 2026-03-13 4/200 2026-03-15 10:59 by zhq0425
[考研] 288求调剂 +4 奇点0314 2026-03-14 4/200 2026-03-14 23:04 by JourneyLucky
[考研] 材料工程327求调剂 +3 xiaohe12w 2026-03-11 3/150 2026-03-14 20:20 by ms629
[考研] 【0703化学调剂】-一志愿华中师范大学-六级475 +5 Becho359 2026-03-11 5/250 2026-03-14 11:35 by 哦哦123
[考研] 材料080500调剂求收留 +3 一颗meteor 2026-03-13 3/150 2026-03-14 10:54 by peike
[考研] 312求调剂 +6 陌宸希 2026-03-10 6/300 2026-03-14 00:40 by JourneyLucky
[考研] 一志愿湖师大化学289求调剂 +6 XMCMM3.14159 2026-03-10 6/300 2026-03-14 00:28 by JourneyLucky
[考研] 复试调剂 +9 Copy267 2026-03-10 9/450 2026-03-13 23:45 by userper
[考研] 材料与化工(0856)304求B区调剂 +6 邱gl 2026-03-12 7/350 2026-03-13 23:24 by 邱gl
[考研] 332求调剂 +3 zjy101327 2026-03-11 6/300 2026-03-13 22:48 by JourneyLucky
[考研] 求材料调剂 +5 隔壁陈先生 2026-03-12 5/250 2026-03-13 22:03 by 星空星月
[考研] 332求调剂 +3 Zz版 2026-03-13 3/150 2026-03-13 20:36 by 18595523086
[考研] 310求调剂 +3 【上上签】 2026-03-11 3/150 2026-03-13 16:16 by JourneyLucky
[考研] 【0856】化学工程(085602)313 分,本科学科评估A类院校化学工程与工艺,诚求调剂 +7 小刘快快上岸 2026-03-11 7/350 2026-03-13 16:06 by ruiyingmiao
[考研] 0856化工原理 +6 z2839474511 2026-03-10 6/300 2026-03-13 10:41 by houyaoxu
[考研] 279求调剂 +3 莫xiao 2026-03-10 4/200 2026-03-11 08:06 by 斩魂滴兔子!
信息提示
请填处理意见