回 帖 发 新 帖 刷新版面

主题:请教一下这段程序的含义

integer nvar
    character*48 name1
      character*4 extension
      character*196 number
      character*48 num1,num2,num3,num4
    character*18  corname1,form

      num1='010203040506070809101112131415161718192021222324'
      num2='252627282930313233343536373839404142434445464748'
      num3='495051525354555657585960616263646566676869707172'
      num4='737475767778798081828384858687888990919293949596'
      number=num1//num2//num3//num4
    
    
    nvar=1      
    corname1= 'tab'
    extension='.dat'
    name1=corname1//number(2*nvar-1:2*nvar)//extension

请教一下这段程序的含义: [b]number(2*nvar-1:2*nvar)[/b]

回复列表 (共11个回复)

沙发

选取数组的一段。在这里选取的是两个字节。

板凳

多 謝 師 兄 指 導!

實 際 上 這 個 寫 法用 起 來 還 不 是 很 方 便 。 我 希 望 能 每 次 運 行 時 自 動 生 成 一 個 文 件 序 號 ﹐ 比 如 ‘文 件 名   01’﹐ ‘文 件 名    02’﹐  等 等。我 只 學 過 trim(adjustl( ))的 寫 法 ﹐ 可 是 這 個只 能  批 量 的  生 成 文 件 。 

繼 續 請 教。 
 


3 楼

character filename*512,fmtstr*32
integer i
integer:: n=99   ! 需要生成多少个文件名
integer:: m=4    ! 文件名中数字所占的位数
character*8::   corname='tab'     ! 文件名前缀
character*8::   extension='.dat'  ! 文件扩展名

! 生成文件名所需要的格式串
write(fmtstr,'(A,I0,a,I0,a)')'(A,I',m,'.',m,',A)'
do i=1,n
  ! 生成文件名
  write(filename,fmtstr)trim(corname),i,trim(extension)
  ! 生成文件名后的操作:)
  ! ...
  write(*,*)trim(filename)        ! 显示文件名,调试用:)
end do

4 楼

多 謝 師 兄 指 導 !還 有 一 個 不 明 白 的 地 方 ﹕

我 的 程 序 現 在 改 成 這 樣 。 我 希 望 每 次 運 行 時 能 按 順 序 生 成 一 個 序 號, 而 不 是 運 行 一 次 批 量 生 成 很 多 。這 樣 查 看 文 件 時 就 指 導 運 行 了 幾 次 ﹐ 修 改 了 幾 次 PARAMETER。  

      program test
      implicit none   
                                                
    integer i,j,ncmax,nmax,k
    real*8 a(32,5),t1(1:32),t2(1:32)
    
      character filename*512, fmtstr*32
    integer::n=99
    integer::m=4
      character*8:: corname='test'
    character*8:: extension='.dat'

      open(unit=10,status='old',file='SAMPLE1.dat')
    
       ncmax=2
    j=0    

    do while (.true.)
        j=j+1
      read(10,*,end=111) (a(j,i), i=1,ncmax) 
     write(6,504)(a(j,i), i=1,2) 
        enddo

111   continue

    nmax=31  

    do 999 k=1,nmax
      t1(k)=a(k,1)  
      t2(k)=a(k,2)
999   continue

      write(fmtstr,'(A,I0,a,I0,a)')'(A,I',m,'.',m,',A)'
      do i=1,n
      write(filename,fmtstr)trim(corname),i,trim(extension)
      write(*,*)trim(filename)     
      end do

      do 112 k=1,nmax
      open(11,status='new',file=filename)
      write(11,504)t1(k),t2(k)

112   continue
            
      close(11)
      close(10)

504   format(2e15.4)

      end


-----SAMPLE1 DAT-----
4.000400000000000e+1    9.064600000000000e-1
3.004700000000000e+1    9.122600000000000e-1
2.257800000000000e+1    9.389800000000000e-1
1.696100100000000e+1    9.812600000000000e-1
1.274300000000000e+1    9.878300000000000e-1
9.571300000000002e+0    1.031400000000000e+0
7.191400000000000e+0    1.058300000000000e+0
5.404300000000000e+0    1.084800000000000e+0
4.059600000000000e+0    1.086100000000000e+0
3.050400000000000e+0    1.150800000000000e+0

5 楼

那你只能把次数存到另外的文件中,然后..
character filename*512,fmtstr*32
integer i,ios
integer:: tms=0  ! 程序运行次数
integer:: n=99   ! 一次需要生成多少个文件名
integer:: m=4    ! 文件名中数字所占的位数
character*8::   corname='tab'     ! 文件名前缀
character*8::   extension='.dat'  ! 文件扩展名

open(1,file='times.dat')          ! 运行次数
read(1,iostat=ios,*)tms           ! 读取运行次数
rewind(1)
tms=tms+1
write(1,*)tms                     ! 将运行次数写回
close(1)

! 生成文件名所需要的格式串
write(fmtstr,'(A,I0,a,I0,a)')'(A,I',m,'.',m,',A)'
do i=1,n
  ! 生成文件名
  write(filename,fmtstr)trim(corname),(tms-1)*n+i,trim(extension)
  ! 生成文件名后的操作:)
  ! ...
  write(*,*)trim(filename)        ! 显示文件名,调试用:)
end do

6 楼

多 謝 師 兄 指 導 !

我 嘗 試 之 後 發 現 無 論 運 行 幾 次 ﹐ 都 只 在 生 成 的 TIMES里 讀 到 一 次 (顯 示 1)﹐ 文 件 名 也 總 是 TAB01。如 果在 OPEN 里 改 STATUS為 NEW﹐ 則 提 示 無 法 寫 入 同 一 個 文 件 。 

以 及 :

integer:: n=1 這 裡 我 設 置 成 1﹐運 行  一 次 只 生 成 一 個 文 件 。 
open(11,status='unknown',file=filename) 其 他 部 份 程 序 基 本 和 原 來 一 樣 。
 

7 楼

嗯,忘写status了,不同的编译器处理方式不同:)

8 楼

我 是 使 用 COMPAQ VISUAL FORTRAN﹐ 版 本 比 較 老 (6-1)。 

現 在 的 情 況 是 即 使 有 改 STATUS﹐ 但 仍 然 沒 有 解 決 問 題 。因 為 我 要 做 很 多 次 模 擬 ﹐ 每 次 都 重 新 命 名 實 在 很 不 方 便 。 希 望 每 次 運 行 時 能 生 成 帶 序 號 的 文 件 名 。

9 楼

open(1,file='times.dat')          ! 读运行次数
read(1,iostat=ios,*)tms           ! 读取运行次数
close(1)
open(1,file='times.dat')          ! 写运行次数
tms=tms+1
write(1,*)tms                     ! 将运行次数写回
close(1)

10 楼

Error: A * specifier is invalid at this point in the control list.
      read(1,iostat=ios,*)tms      

之前已经尝试过后面加上*, 提示错误 - -lll

我来回复

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