2013-08-23 13 views
8

In Fortran wird jedes Mal, wenn WRITE verwendet wird, eine neue Zeile erstellt. Um den Ablauf eines laufenden Programms zu steuern, möchte ich auf dem Bildschirm den aktuellen Wert einer Variablen schreiben, aber immer in derselben Zeile (den vorherigen Wert löschen und am Anfang der Zeile beginnen). Das heißt, so etwas wieSchreiben in der gleichen Zeile in FORTRAN

1 CONTINUE 
     "update the value of a" 
     WRITE(*,*) a 
     BACKSPACE "screen" 
     GOTO 1 

So etwas wie WRITE(*,*,ADVANCE='NO') (falsche sowieso) ist nicht ganz das, was ich Notwendigkeit: das alle Werte von a einer nach dem anderen auf eine sehr lange Zeile schreiben würde.

+0

Ziemlich sicher, dass 'RÜCKSEITE' ** nicht ** tut, was Sie scheinen zu denken, dass es tut. –

Antwort

7

Ein Trick, den ich für gezeigt wurde, was Sie wollen, ist als

do l=1,lmax 
    ...update a... 
    write(*,'(1a1,<type>,$)') char(13), a 
enddo 

folgt wo <type> Ihr Formatbezeichner ist für a (das heißt, i0 für integer).

Der Schlüssel ist die char(13), die der Wagenrücklauf ist, und die $ im Formatdeskriptor. Ich weiß wirklich nicht, ob es einen Namen für $ gibt, ich weiß nur, dass es für die Anzeige auf dem Bildschirm funktioniert - für die Ausgabe in Datei erhalten Sie eine a auf jeder Zeile.

+0

Beachten Sie, dass der Deskriptor $ nicht in der Standardsprache ist. – IanH

+0

Ich vermutete, dass es nicht Standard war, aber es funktioniert für mich mit ifort 11+ und gfortran 4.6 & 4.7. –

+0

advance = no ist der 'Standard' Ersatz für das $. Auch die Lösung ist abhängig von Ihrem Terminal-Typ, wenn diese Antwort nicht funktioniert, kommen Sie zurück und sagen Sie uns, welches Terminal Sie laufen, – agentp

Verwandte Themen