回 帖 发 新 帖 刷新版面

主题:linux系统下fortran 调用shell出错,大家帮着看下!

program main
 character(len=50):: filename
 integer :: time_u
 filename = '08092320.000'
 call write_time_data(trim(filename),time_u)
 open (12,file='./pp2.txt')
 write(12,*)filename
 write(12,*)time_u
 close(12)
 end


 subroutine write_time_data(filename_data,dset_t_int)
 implicit none
 character(len=50):: filename_data
 integer :: len_datafile,yr_data,mn_data,dd_data,hr_data,postfix_data,dset_t_int 
                               ! dset_t_int====the time of the dataset in character format
 character :: str_temp3
 character(len=10) :: dset_t_cha   ! the time of the dataset in character format
 character(len=256) :: shellcmd1,shellcmd2,shellcmd3,shellcmd4
 character(len=50) :: cst_date,cst_sec,utc_sec
 len_datafile=len(trim(filename_data))
 read(filename_data(1:len_datafile),'(4i2.2,a1,i3.3)')yr_data,mn_data,dd_data,hr_data,str_temp3,postfix_data
     if (yr_data/10.GT. 1 ) then
           dset_t_cha(1:2)='19'
     else
           dset_t_cha(1:2)='20'
     endif
!     if((hr_data.le.7).and.(hr_data.ge.0))then
!      hr_data=hr_data+16
!      dd_data=dd_data-1
!      else
!      hr_data=hr_data-8
!      endif 
      write(dset_t_cha(3:4),'(i2.2)')yr_data
      write(dset_t_cha(5:6),'(i2.2)')mn_data
      write(dset_t_cha(7:8),'(i2.2)')dd_data 
      write(dset_t_cha(9:10),'(i2.2)')hr_data
    shellcmd1 = " date -d "//trim(dset_t_cha(1:8))//" +%s"
    shellcmd1 = "cst_date=`"//trim(shellcmd1)//"`"
    call system(shellcmd1)
    shellcmd2 = "echo "//trim(cst_date)//" + "//dset_t_cha(9:10)//  " *3600  | bc"
    shellcmd2 = "cst_sec=` "//trim(shellcmd2)//" ` "
    call system(shellcmd2)
    shellcmd3 = "echo "//trim(cst_sec)// " -8*3600  | bc "
    shellcmd3 = "utc_sec=` "//trim(shellcmd3)//" ` "
    call system(shellcmd3)
     shellcmd4 = "date --date="//"""1970-01-01 UTC "//trim(utc_sec)//" seconds"" +%Y%m%d%H "
    shellcmd4 = "dset_t_int=` "//trim(shellcmd4)//" ` "
    call system(shellcmd4)
!      read(dset_t_cha(1:10),'(i10)')dset_t_int
 end subroutine write_time_data

回复列表 (共3个回复)

沙发


编译可以通过,但是运行时,出现一下错误:
[root@localhost mois]# pgf90 -o pp test.f90
[root@localhost mois]# ./pp
sh: -c: line 0: unexpected EOF while looking for matching ``'
sh: -c: line 1: syntax error: unexpected end of file
sh: -c: line 0: unexpected EOF while looking for matching ``'
sh: -c: line 1: syntax error: unexpected end of file
sh: -c: line 0: unexpected EOF while looking for matching ``'
sh: -c: line 1: syntax error: unexpected end of file
[root@localhost mois]# 

板凳


这个程序的主要目的就是想用shell里面的日期计算功能,来实现北京时间转化为欧洲时间:08092329是2008年9月23日20点{北京时},然后转化为欧洲时2008092312,但是老是提示那个sh里的反引号的不匹配 我就不知道是我的fortran 里的字符没写对还是什么原因,请各位高手给予解答啊,困惑了好久了!
  谢谢了,请帮忙看下哈!

3 楼


call write_time_data(trim(filename),time_u)
这句改成:call write_time_data(filename,time_u) 即可!

我来回复

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