C **********************************************************************************
C       PARAMETER ( NRECL = 4 )    !基本是用重定义输入
C       PARAMETER ( NRECL = 1 )    !所以最好直接设定或改HEAER
C **********************************************************************************
C   Linyee  2011-05     修改
C   增加NRECL参数 增加了文件名参数 增加了数据转换自动适应能力。增加了文件自动查找转换功能。
C   与官方最大的不同是,可以直接放到DE405目录下执行 ASC2EPH < header.405
C   可以直接生成HEAER中指定的文件名JPLEPH.EPH,唯一需要的是将header.405第一行修改成下边的形式
C---------------------------------------------------------------
CKSIZE=  2036    NCOEFF=  1018     NRECL=    4    JPLEPH.EPH
C    20  ascp1600.405    ascp2200.405
C    00  ascp1600.405    ascp2200.405
C---------------------------------------------------------------
CKSIZE=  1456    NCOEFF=   728     NRECL=    4    JPLEPH.EPH
C  -100  ascm3000.406    ascm0100.406
C   100  ascp0000.406    ascp2900.406
C---------------------------------------------------------------
C   转换以后只原本1/3不到的数据大小。第二行是第一步循回。第三行是第二次循回。不用时00。
C   要用时就根据实际设置比如DE406设为-100,即公元前及公元后。两组。
C   单个文件小点操作比较快,所以本法比原法用COPY生成新.405再转换会快非常多。
C **********************************************************************************
C---------------------------------------------------------------!主程式开始
C---------------------------------------------------------------!定义部分+++++++++++++++++IMPLICIT NONECHARACTER*6  CNAM (400)CHARACTER*6  TTL  (14,3)CHARACTER*12 HEADERCHARACTER*20 DFEFLE   !文件名CHARACTER*4  ASCNME(6), ASCNM2(6)CHARACTER*12 ASCFNM(2) !起始终止文件名DOUBLE PRECISION  AUDOUBLE PRECISION  CVAL (400)DOUBLE PRECISION  DB(3000)DOUBLE PRECISION  DB2ZDOUBLE PRECISION  EMRATDOUBLE PRECISION  SS   (3)DOUBLE PRECISION  T1, T2INTEGER  ASCLEN, ASCSTT, ASCEND, ASCLE2, ASCST2, ASCEN2INTEGER  DFENCO, DFEBLKINTEGER  I, IPT (3,12), IRECSZ, ININTEGER  JINTEGER  K,KK,KP2,KSIZEINTEGER  LPT (3)INTEGER  N, NCON, NROUT, NCOEFF, NRW, NUMDEINTEGER  NRECLINTEGER  OUTLOGICAL  FIRST, IWHILE,FTRUEDATA     FIRST / .TRUE. /DATA     FTRUE / .TRUE. /C       PARAMETER ( NRECL = 4 )   !基本是用重定义输入
C       PARAMETER ( NRECL = 1 )    !所以最好直接设定或修HEAERdb2z=0.d0          !起始儒略日T1 = 0.D0T2 = 9999999.d0    !儒略日最大限制!代码部分+++++++++++++++++write(*,*) ' JPL ASCII-TO-DIRECT-I/O 程式. ' //&            ' 最后修改 2011-05.'write(*,*) 'Linyee 修改兼汉化,NRECL参数改为HEADER文件中获取'!读取参数+++++++++++++++++
C      读取main ephemeris格式大小的记录.(从 header.xxx)!跳过6个字符取6位数整数并输入!NRECL=4READ  (*,'(6X,I6,2(11X,I6),A20)') KSIZE,DFENCO,NRECL,DFEFLE WRITE (*,100)              KSIZE,DFENCO,NRECL,DFEFLE
100    FORMAT(/'KSIZE =',I6,' DFENCOEFF=',I6,'     NRECL=',I6,a20)IRECSZ = NRECL * KSIZE  !单元模块大小 文本1字节 二进制VFT默认4字节一单元 !stop 'debug'!打开文件+++++++++++++++++!文件号12,JPLEPH文件名,任意读写,二进制方式,模块大小OPEN ( UNIT   = 12,.        FILE   = DFEFLE,.        ACCESS = 'DIRECT',.        FORM   = 'UNFORMATTED',.        RECL   = 1,.        STATUS = 'REPLACE' )!NEW OLD REPLACE UNKNOW SCRATCH ,SEQUENTIAL DIRECT,UNFORMATTED FORMATTEDWRITE (12,REC=1,IOSTAT=OUT) (DB(K),K=1,1)HEADER=''read(12,REC=1,IOSTAT=IN) HEADERDFEBLK=len_trim(HEADER)write (*,*)     "默认单元大小:" ,DFEBLK!重新打开文件CLOSE (12)IRECSZ=IRECSZ / DFEBLKOPEN ( UNIT   = 12,.        FILE   = DFEFLE,.        ACCESS = 'DIRECT',.        FORM   = 'UNFORMATTED',.        RECL   = IRECSZ,.        STATUS = 'REPLACE' )WRITE (12,REC=1,IOSTAT=OUT) (DB(K),K=1,1)!stop 'debug'!文件名自适应功能READ  (*,'(I8,3a4,4x,3a4)') ASCLEN,ASCNME  !每行一读read(ASCNME(2),*) ASCSTT   !当前文件号read(ASCNME(5),*) ASCEND  !终止文件号Write(ASCFNM(1),'(a4,i4.4,a4)') ASCNME(1),ASCSTT,ASCNME(3)ASCFNM(2)=ASCNME(4) // ASCNME(5) // ASCNME(6)WRITE (*,'(3a15)') '起始-终止文件名:',ASCFNM(1),ASCFNM(2)WRITE (*,*)ASCLENREAD  (*,'(I8,3a4,4x,3a4)') ASCLE2,ASCNM2  !每行一读ASCFNM(1)=ASCNM2(1) // ASCNM2(2) // ASCNM2(3)ASCFNM(2)=ASCNM2(4) // ASCNM2(5) // ASCNM2(6)read(ASCNM2(2),*) ASCST2   !当前文件号read(ASCNM2(5),*) ASCEN2  !终止文件号WRITE (*,'(3a15)') '起始-终止文件名:',ASCFNM(1),ASCFNM(2)WRITE (*,*)ASCLE2!stop "debug"!检测参数if(nrecl .ne. 1 .and. nrecl .ne. 4) thenwrite(*,*)'*** 错误: 未设置或使用了未定义的 NRECL ***'stopendif!读(GROUP 1010)组.并输出CALL  NXTGRP ( HEADER )IF (HEADER .NE. 'GROUP   1010')  THENCALL  ERRPRT ( 1010, '未找到组号' )ENDIFREAD (*,'(14A6)')    TTLWRITE(*,'(/(14A6))') TTL!读(GROUP 1030)组.三个数据开始儒略日,结束日,数据块长度CALL  NXTGRP ( HEADER )IF ( HEADER .NE. 'GROUP   1030' ) THENCALL ERRPRT ( 1030, '未找到组号' )ENDIFREAD (*,'(3D12.0)')  SSWRITE(*,*) SS!读(GROUP 1040)组。名称CALL  NXTGRP ( HEADER )IF ( HEADER .NE. 'GROUP   1040 ') THENCALL ERRPRT ( 1040, '未找到组号' )ENDIF!隐式循环(I),I=3,11,4即3 7 11三次。!读取8字符只能存6字符READ (*,'(I6)')    NREAD (*,'(10A8)') (CNAM(I),I=1,N)    !WRITE(*,*) CNAMNCON = N!读取数据忽略空格。值CALL  NXTGRP ( HEADER )IF ( HEADER .NE. 'GROUP   1041' ) THENCALL ERRPRT ( 1041, '未找到组号' )ENDIFREAD (*,'(I6)')       NREAD (*,*)  (CVAL(I),I=1,N)DO  I = 1, NIF ( CNAM(I) .EQ. 'AU    ' )  AU    = CVAL(I)IF ( CNAM(I) .EQ. 'EMRAT ' )  EMRAT = CVAL(I)IF ( CNAM(I) .EQ. 'DENUM ' )  NUMDE = CVAL(I)END DO!格式输出最多500行两列。每列前8为名后为双精WRITE (*,'(500(/2(A8,D24.16)))') (CNAM(I),CVAL(I),I=1,N)!读(GROUP 1050)组.13列CALL  NXTGRP ( HEADER )IF ( HEADER .NE. 'GROUP   1050' ) THENCALL ERRPRT ( 1050, '未找到组号' )ENDIF!每行13列,三行。前12列到IPT,第13列到LPT。READ (*,'(13I6)')   ((IPT(I,J),J=1,12),LPT(I),I=1,3)!Linyee 增加属性个数,因为除了章动2其它都3,所以又去掉!do i=1 , 11!  IPT(4,i)=(IPT(1,i+1)-IPT(1,i))/IPT(2,i)/IPT(3,i)!end do!  IPT(4,12)=(LPT(1)-IPT(1,12))/IPT(2,12)/IPT(3,12)!  LPT(4)=(DFENCO+1-LPT(1))/LPT(2)/LPT(3)WRITE(*,'(/(3I5))') IPT, LPT  !输完第一数再输第二数.!读取数据+++++++++++++++++!读(GROUP 1070)组.数据组CALL  NXTGRP ( HEADER )IF ( HEADER .NE. 'GROUP   1070' ) CALL ERRPRT(1070,'未找到组号')
C-----------------------------------------------------------------!循环读数据!ASCLEN, ASCSTT, ASCEND
C-----------------------------------------------------------------NROUT  = 0IN     = 0OUT    = 0!第一循回
77  if (ASCLEN .NE. 0) thenIWHILE =.TRUE.go to 55endifgo to 66stop '第一循回失败转第二循回'55   do while(IWHILE)Write(ASCFNM(1),'(a4,i4.4,a4)') ASCNME(1),ASCSTT,ASCNME(3)!打开文件OPEN ( UNIT   = 22,.        FILE   = ASCFNM(1),.        ACCESS = 'SEQUENTIAL',.        FORM   = 'FORMATTED',.        IOSTAT   = IN,
C     .        RECL   = IRECSZ,.        STATUS = 'OLD' )if (IN .ne. 0) thencall  ERRPRT(ASCSTT,ASCFNM(1) // ' 未找到后续数据文件')endif
C---------------------------------------------------------------------------!文件记录遍历
C---------------------------------------------------------------------------!读数据。记录号,记录项。11  read(22,'(2i6)',IOSTAT =IN)nrw,ncoeffif(IN .NE. 0)thenCALL ERRPRT(1070,' 未找到数据块')endifif(nrw .eq. 0) go to 11!读共1018-1个数据,每行3个。do k=1,ncoeff,3kp2=min(k+2,ncoeff)    !每行结束号read(22,*,IOSTAT = IN)(DB(kk),kk=k,kp2)if(IN .NE. 0)thenCALL ERRPRT(k,' 此条数据读取错误或文件已结束')endifenddoDO WHILE (       ( IN    .EQ. 0 ).           .AND. ( DB(2) .LT. T2) )IF ( 2*NCOEFF .NE. KSIZE ) THENCALL ERRPRT(NCOEFF,' 记录项数,.    不符合规定大小')ENDIFIF  ( (DB(2) .GE. T1) .AND. (DB(1) .GE. DB2Z) ) THENIF ( FIRST ) THENDB2Z  = DB(1)FIRST = .FALSE.ENDIFIF (DB(1) .NE. DB2Z ) THENCALL ERRPRT (NRW, '记录初始日期错误')ENDIFDB2Z  = DB(2)  !置下一次初始日期NROUT = NROUT + 1
C   保存到文件WRITE (12,REC=NROUT+2,IOSTAT=OUT) (DB(K),K=1,NCOEFF)IF ( OUT .NE. 0 ) THENCALL ERRPRT (NROUT, &                     '记录保存错误')ENDIF
C   开始日期,结束日期,日期长度IF (NROUT .EQ. 1) THENSS(1) = DB(1)SS(3) = DB(2) - DB(1)ENDIFSS(2) = DB(2)C  IF ( NROUT .EQ. 1 ) THEN
C       WRITE (*,271) NROUT, DB(2)
C   ENDIF
271          FORMAT (I6,&              ' 条EPH记录.  结束JED = ',&              F12.2," :From: ",A12)C  输出个位为1的记录信息IF ( MOD(NROUT,200) .EQ. 1 ) THENIF ( DB(1) .GE. T1 ) THENWRITE (*,271) NROUT, DB(2),ASCFNM(1)ELSEWRITE (*,*) ' 查找第一记录中……'ENDIFENDIFENDIF!查找下一条记录READ (22,'(2I6)',IOSTAT =IN) NRW, NCOEFFif(IN .eq. 0)thendo k=1,ncoeff,3kp2=min(k+2,ncoeff)read(22,*,IOSTAT = IN)(DB(kk),kk=k,kp2)if(IN .NE. 0)thenCALL ERRPRT(k,' 此条数据读取错误或文件已结束')endifenddoendifEND DO!下一文件完全判别CLOSE (22)ASCSTT=ASCSTT+ASCLENIWHILE= .FALSE.if ((ASCSTT .GE. ASCEND) .and. (ASCLEN .LT. 0)) thenIWHILE=.true.endifif ((ASCSTT .LE. ASCEND) .and. (ASCLEN .GT. 0)) thenIWHILE=.true.endifEND DOC---------------------------------------------------------------------------!第二循回
C---------------------------------------------------------------------------
66  if (ASCLE2 .NE. 0) thenASCSTT=ASCST2ASCLEN=ASCLE2ASCEND=ASCEN2ASCNME=ASCNM2ASCLE2=0IWHILE=.true.go to 55endifC---------------------------------------------------------------------------!循回结束.
C---------------------------------------------------------------------------C   输出最后的记录信息WRITE (*,271) NROUT, DB(2),ASCFNM(1)C      输出头信息NROUT = 1WRITE(12,REC=1,IOSTAT=OUT) TTL,CNAM,SS,NCON,AU,&                            EMRAT,IPT,NUMDE,LPTIF ( OUT .NE. 0 ) THENCALL ERRPRT ( NROUT, '记录保存错误')ENDIFC      输出头信息中的值表NROUT = 2WRITE(12,REC=2,IOSTAT=OUT)CVALIF ( OUT .NE. 0 ) THENCALL ERRPRT ( NROUT, '记录保存错误')ENDIFCLOSE (12)STOP ' OK'END
C---------------------------------------------------------------!主程式结束
C---------------------------------------------------------------C---------------------------------------------------------------!输出错误信息并中止程式
C---------------------------------------------------------------SUBROUTINE  ERRPRT (I, MSG)CHARACTER*(*)  MSGINTEGER        IWRITE (*,200)  I, MSG
200    FORMAT('ERROR #',I8,2X,A50)STOP ' ERROR 'END
C---------------------------------------------------------------
C---------------------------------------------------------------C---------------------------------------------------------------!进入下一组数据区!'GROUP   1070'行作为结束行.
C---------------------------------------------------------------SUBROUTINE  NXTGRP ( HEADER )CHARACTER*(*)  HEADERCHARACTER*12   BLANK44     HEADER = ' 'DO WHILE ( HEADER .EQ. ' ' )  !跳过空格行READ (*,'(A)') HEADERENDDOREAD(HEADER,'(A5)') BLANK       !不是组标识再找过if (trim(BLANK) .NE. "GROUP") goto 44IF ( HEADER .NE. 'GROUP   1070' )READ (*, '(A)') BLANK  !跳过空格RETURNEND
C---------------------------------------------------------------
C---------------------------------------------------------------

WINDOWS下直接用 VisualFortran6.5 编译 DF ASC2eph.f就会生成 ASC2eph.exe

然后将程序复制到405 406下,将头文件第一行改成

KSIZE= 2036 NCOEFF= 1018 NRECL= 4 JPLEPH.405 20 ascp1600.405 ascp2200.405 00 ascp1600.405 ascp2200.405

406改成

KSIZE= 1456 NCOEFF= 728 NRECL= 4 JPLEPH.406 -100 ascm3000.406 ascm0100.406 100 ascp0000.406 ascp2900.406

直接运行 ASC2eph <heaer.405

就会根据HEADER前三行声明生成JPLEPH.405的文件。每个记录项大小为 Ksize*4即 NCOEFF*8。双精度单项大小。

源码跟程式都上传到了CSDN资源上。需要可以去找下。

星历表ASC2EPH修改且汉化相关推荐

  1. 第十五:Pytest-html报告修改与汉化

    1.前言 1.1.Pytest框架可以使用两种测试报告,其中一种就是使用pytest-html插件生成的测试报告,但是报告中有一些信息没有什么用途或者显示的不太好看,还有一些想要在报告中展示的信息却没 ...

  2. Android对现有的apk进行修改(汉化,修改QQ尾巴)

    我们可以用压缩软件把apk打开,对一些apk进行简单的修改,比如说替换掉里面的原有图片,换成自己喜欢的(ps:图片名字必须一样),对一些国外的软件进行汉化,然后在利用辅助软件对修改过的apk进行再次签 ...

  3. PPC/SP/PC汉化教程:如何汉化一个软件

    [以前也想过汉化一些软件,但那时候对PE文件都不是很了解,脱壳是什么都不知道,今天看到这篇文章,觉得不错,就转载来看下,以便以后需要用的时候能找到] 其实PC和PPC/SP在汉化的许多地方都是相似的, ...

  4. (转) SonicStage 4.4 已经被我汉化,现提供下载

    http://www.51erji.com/bbs/viewthread.php?tid=70420&extra=page%3D1&page=2 发表于 2008-8-4 22:46  ...

  5. (转)SonicStage CP V4.4 已经被我汉化,现提供下载

    http://www.jd-bbs.com/viewthread.php?tid=1692929&page=1&extra=page%3D1 SonicStage CP V4.4 已经 ...

  6. 星历表DE405/406 testeph.f汉化兼修改

    !星号 英文名 中文名 数据 !1 MERCURY 水星 L1 !2 VENUS 金星 L2 !3 EARTH 地球 L10 !4 MARS 火星 L4 !5 JUPITER 木星 L5 !6 SAT ...

  7. 暗夜ト星ノ冥土馆~ぷにゅぷりXX 汉化补丁

    [名称]:暗夜ト星ノ冥土馆-ぷにゅぷりXX 基于Flash的伪3D游戏(官方语为2.5D).你要做的只是点击下一句按钮,然后便可轻松地达到所谓的"通关".但好处是你可以欣赏到极其华 ...

  8. 【Windows 逆向】CheatEngine 工具 ( 汉化版 CE 工具推荐 | 编写简单 C++ 程序 | C++ 程序执行分析 | 使用 CE 修改上述 C++ 程序 )

    文章目录 一.汉化版 CE 工具推荐 二.编写简单 C++ 程序 三.C++ 程序执行分析 四.使用 CE 修改上述 C++ 程序 一.汉化版 CE 工具推荐 推荐一个汉化版的 CE 工具 : htt ...

  9. 安装ubuntu20.04(安装vim、gcc、VMtools、中文输入法、汉化、修改IP地址)

    目录 ubuntu安装包获取 ubuntu的安装 安装网络配置命令ifconfig 连接网络 如何修改IP地址 安装VMtools 解决VMware Tools选项灰色 VMtools安装 安装中文, ...

最新文章

  1. tomcat修改默认web目录
  2. Linux 进程等待队列
  3. springboot使用Thymeleaf引入html文件
  4. 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
  5. sqlite数据库的基本增删改查操作
  6. 用c++定义两个坐标点,计算两点间距离;进而计算线段的面积
  7. Kotlin 势必取代 Java?
  8. 计算机网络 教学大纲 谢希仁,《计算机网络》教学大纲.doc
  9. 拓端tecdat|R语言arima,向量自回归(VAR),周期自回归(PAR)模型分析温度时间序列
  10. 手把手教学暴力破解WIFI密码(仅供学习交流)
  11. 2022年版中国电子信息产业趋势预测及投资战略规划分析报告
  12. 基于MATLAB 的X-CT图像重建计算机仿真实验研究实验
  13. UIView隐藏超出superview的部分
  14. cloudstack上传模板时候的一个报错
  15. IT行业前景真的好吗_转IT学什么语言好?
  16. windows registry = control pannel
  17. 建数据库表需要注意哪些点
  18. pyecharts 画K线图
  19. iPhone怎么设置代理ip
  20. Java 如何查询当前项目Spring和SpringBoot的版本号

热门文章

  1. 怎么判断30公分?看我的图文传教就清楚了
  2. 微信小程序购物商城定制开发
  3. 网络数据分析溯源(查找邮件地址)
  4. Java8中新生代eden:s0:s1不是8:1:1问题
  5. 在windows上配置elasticsearch和river-mongodb插件
  6. 字符串去重的5种方式
  7. SysML实践指南第二版(中文翻译:刘亚龙)第五章-SysML语言框架
  8. http、https 协议运行过程 公钥私钥,证书存放位置,传递证书,(非)对称加密。
  9. Postman 教程
  10. 第一次参加CCF心得