2017-06-06 4 views
1

Je suis en train d'écrire un code pour obtenir le format suivantCompter dans la phrase

filein (i) = 'box_01_step_000000000000j.pdb'

la sortie devrait être comme:

filein(1)='box_01_step_00000000000000.pdb' 
filein(2)='box_01_step_00000000000020.pdb' 
filein(3)='box_01_step_00000000000040.pdb' 
filein(4)='box_01_step_00000000000060.pdb' 
filein(5)='box_01_step_00000000000080.pdb' 
filein(6)='box_01_step_00000000000100.pdb' 
filein(7)='box_01_step_00000000000120.pdb' 
filein(8)='box_01_step_00000000000140.pdb' 
filein(9)='box_01_step_00000000000160.pdb' 
filein(10)='box_01_step_00000000000180.pdb' 
filein(11)='box_01_step_00000000000200.pdb' 

mon code est

program main 
implicit none 
integer :: i,n,j 
character(4):: filein,box,step,pdb 
do i = 0, 501 
    open (300,file='in') 
end do 
j=0 
do i = 0, 501 
    j=j+20 
    WRITE(300,*) "'filein'",'"("',(i),'")"',"'='","'box_01_step_'","'000000000000'",j,"'.pdb'" 
enddo 
close (300) 
end program 

je me suis

'filein'"("   0 ")"'=''box_01_step_''000000000000'   20 '.pdb' 
'filein'"("   1 ")"'=''box_01_step_''000000000000'   40 '.pdb' 
'filein'"("   2 ")"'=''box_01_step_''000000000000'   60 '.pdb' 
'filein'"("   3 ")"'=''box_01_step_''000000000000'   80 '.pdb' 

Comment puis-je faire

filein(1)='box_01_step_00000000000000.pdb' 
filein(2)='box_01_step_00000000000020.pdb' 
filein(3)='box_01_step_00000000000040.pdb' 

Répondre

1
  • pour démarrer les valeurs i de 1 au lieu de 0, utilisez une valeur de départ de 1 au lieu de 0

  • pour démarrer les valeurs j à partir de 0 au lieu de 20, faites l'addition après la sortie au lieu d'avant - ou au lieu d'utiliser une variable séparée j juste le calculer de i

  • n'ouvre pas le fichier 502 fois; une fois suffit

  • pour convertir j en décimal par des zéros, le plus simple est de loin d'utiliser la sortie formatée avec le spécificateur Iw.m, et la sortie au format est aussi une façon un peu plus facile de faire le reste de ce que vous voulez

Programme:

program SO44379759 
    implicit none 
    integer :: i 
    open(300,file='in') 
    ! j=0 
    do i=1,501 
    ! j=j+20 
    write(300,'(a,i0,a,i14.14,a)') "filein(",i,")='box_01_step_",(i-1)*20,".pdb'" 
    end do 
    close(300) 
end program 

sortie:

filein(1)='box_01_step_00000000000000.pdb' 
filein(2)='box_01_step_00000000000020.pdb' 
filein(3)='box_01_step_00000000000040.pdb' 
filein(4)='box_01_step_00000000000060.pdb' 
filein(5)='box_01_step_00000000000080.pdb' 
filein(6)='box_01_step_00000000000100.pdb' 
filein(7)='box_01_step_00000000000120.pdb' 
filein(8)='box_01_step_00000000000140.pdb' 
filein(9)='box_01_step_00000000000160.pdb' 
filein(10)='box_01_step_00000000000180.pdb' 
filein(11)='box_01_step_00000000000200.pdb' 
filein(12)='box_01_step_00000000000220.pdb' 
filein(13)='box_01_step_00000000000240.pdb' 
filein(14)='box_01_step_00000000000260.pdb' 
filein(15)='box_01_step_00000000000280.pdb' 
filein(16)='box_01_step_00000000000300.pdb' 
filein(17)='box_01_step_00000000000320.pdb' 
filein(18)='box_01_step_00000000000340.pdb' 
filein(19)='box_01_step_00000000000360.pdb' 
filein(20)='box_01_step_00000000000380.pdb' 
+0

Merci beaucoup dave_thompson_085 – Chung