2017-06-06 4 views
1

Ich versuche, einen Code zu schreiben, das folgende FormatZählen in Satz

filein (i) = 'box_01_step_000000000000j.pdb' sollte

die Ausgabe zu erhalten wie:

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' 

Mein Code ist

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 

ich habe

'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' 

Wie kann ich es machen

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

Antwort

1
  • die i Werte von 1 statt 0 zu starten, einen Startwert von 1 statt 0

  • verwenden, um die j Werte zu starten von 0 anstelle von 20, fügen Sie die nach die Ausgabe statt vorher - oder anstelle der Verwendung einer separaten Variable j berechnen Sie einfach aus i

  • Öffnen Sie die Datei nicht 502 Mal. einmal genug ist

  • bis j konvertiert mit Abstand mit führenden Nullen auf die einfachste Weise in Dezimalzahlen zu formatierte Ausgabe mit dem Iw.m Spezifizierer verwenden und formatierte Ausgabe ist auch eine etwas einfachere Möglichkeit, den Rest zu tun, was Sie wollen

Programm:

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 

Ausgang:

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

Vielen Dank dave_thompson_085 – Chung