Ich habe FORTRAN vor ein paar, vielen Jahren, und vor kurzem beauftragt, ein altes FORTRAN-Programm (F77) zu erhalten. Der folgende Code war ungewohnt:Klärung eines Fortran implizierte Schleife
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS,
. (BUFFER(BIX), BIX=1, NUM_WORDS)
Überprüfung einig Online-Foren aufgedeckt, dass der Teil, den ich verwirrt, die Fortsetzungszeile, eine implizite Schleife ist. Da mein Programm gerade hier Probleme macht, möchte ich dies in eine konventionelle DO-Schleife umwandeln. Die Umwandlung könnte auch dem nächsten armen Kerl helfen, der das Ding in 5 Jahren kalt macht! Wie auch immer, meine beste Vermutung an der DO-Schleife entspricht
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS
DO BIX=1, NUM_WORDS
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) BUFFER(BIX)
ENDDO
Aber wenn ich nur diese Änderung vorgenommen, Testfälle, die Arbeiten wurden aufgehört zu arbeiten. Ich hatte immer noch das Gefühl, dass hier zwei verschiedene READs vorgingen (das erste, um NUM_WORDS zu erhalten, und das zweite, um die Daten zu durchlaufen), also versuchte ich eine weniger drastische Änderung, indem ich sie in zwei Anweisungen umwandelte, aber die implizierte Schleife behielt:
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) (BUFFER(BIX), BIX=1, NUM_WORDS)
Aber nur diese Änderung führt auch dazu, dass die guten Testfälle fehlschlagen. In beiden meiner Änderungen kam der Wert von NUM_WORDS wie erwartet durch, so scheint es, dass die Schleife dort ist, wo es fehlschlägt.
Also, was ist die äquivalente DO-Schleife für die ursprüngliche implizite Schleife? Oder bin ich überhaupt auf der falschen Spur?
Danke
Danke für die Antwort, janneb. Ihre Annahme über die Dateiöffnung war richtig; Ich verwende unformatierte sequentielle. Und von Ihrer Antwort sehe ich, dass das wichtigere Problem das LESEN ist, und dass ich den Überblick über die Tatsache verlor, dass es eine Aufzeichnung liest. – user3617977