2016-08-01 3 views
0

Ich habe versucht, meine Kryptografie-Algorithmus von [hardware-Tests] (http://stat.fsu.edu/pub/diehard/) zu testen, dass ich erkannte, meine Eingabedatei muss eine unformatierte und direkte Zugriffsdatei sein. Also habe ich versucht, ein einfaches Programm in Fortran zu schreiben, um aus einer Datei zu lesen und sie in eine andere zu schreiben.Fortran :: Syntax Fehler in OPEN-Anweisung um (1)

Erstens ist es die einzige Möglichkeit, eine unformatierte oder direkte Zugriffsdatei zu erstellen?

Wenn es so ist, habe ich diesen Fehler bekam

 open(unit=2, file='unf.BIN',RECL=rl , form='UNFORMATTED', access='direct') 
                   1 

Fehler: Syntaxfehler in der OPEN-Anweisung auf (1)

ich RECL verwenden, weil einige fehlende RECL Parameter in Open Anweisung Fehler . (Fortran 90, Compiling program: Error messages)

Hier ist mein Fortran-Code:

program BinaryWriter 
    implicit none 

    integer :: i 
    integer :: p 

    open(unit=1,file='encout') 
    open(unit=2, file='unf.BIN',RECL=rl , form='UNFORMATTED', access='direct') 

    do i=1 ,256 
     read (8,'(i1)') p 
     write(*,*) p 
    end do 

    close(1) 
    close(2) 

    end program BinaryWriter 
+2

Ist Ihre Datei freie Form oder feste Form, und was ist die Erweiterung des Dateinamens? Meine Vermutung ist, dass Sie eine feste Formularquelle haben und die Zeile mit der Anweisung open zu lang ist. – IanH

+0

Du hast Recht, @IanH - das würde die seltsame Position der '1' erklären. – chw21

Antwort

1

Zwei Dinge:

1) Bitte stoppen Stückzahlen mit weniger als 10 Praktisch alle modernen Fortran Compiler haben jetzt die newunit Kennung, die anstelle der alten unit tatsächlich einen ungenutzten Wert nimmt, so dass immer ein verwenden Variable dort. Aber selbst wenn Sie unit verwenden möchten, legen Sie einen Wert von 10 oder mehr fest.

2) Für direkten Zugriff benötigt das Programm die Satzlänge. Wenn Sie also access="direct" haben, benötigen Sie auch einen recl=<some integer value>, um dem Compiler mitzuteilen, wo ein neuer Datensatz beginnt.

Jetzt in Ihrem Fall haben Sie einen RECL=rl Eintrag in der offenen Anweisung, aber ich kann nicht sehen, was rl ist. Es muss eine positive Ganzzahl sein.

Bearbeiten hinzufügen: Wie @IanH in einem Kommentar unter Ihre Frage hingewiesen hat, ist es möglich, dass Sie feste Form Fortran verwenden. Dies kann daran liegen, dass die Dateierweiterung der Quellcodedatei .f oder .f77 ist. In diesem Fall würden Sie Ihre Zeilen manuell wickeln müssen:

 program dir 
     implicit none 
     integer :: rl 

     open(unit=20, file='delme.bin', recl=<the record length>, 
    &  form='unformatted', access='direct') 
     close(20) 
     end program dir 

Beachten Sie, dass die & in der 6. Position der Linie ist. Fortran 77 Code verwendet normalerweise eine + da, aber & ist auch kompatibel mit neueren Fortran-Versionen, deshalb bevorzuge ich es. F77-Standard ist nur irgendein Zeichen in diesem 6. Platz.

+0

Vielen Dank für die Erinnerung. Ich habe das Beispiel bearbeitet. – chw21