2010-12-28 10 views
7

Ich schreibe einige einfache Ausgabe in Fortran, aber ich möchte Leerzeichen Begrenzer. Wenn die folgende Anweisung verwenden, aber:Wie kann ich die numerische Ausgabe in Fortran links-rechtfertigen?

format(A20,ES18.8,A12,ES18.8) 

ich folgende Ausgabe:

p001t0000    3.49141273E+01obsgp_oden  1.00000000E+00 

ich würde das lieber:

p001t0000   3.49141273E+01 obsgp_oden 1.00000000E+00 

habe ich versucht, negative Werte für die Breite verwendet (wie in Python), aber keine Würfel. Also, gibt es eine Möglichkeit, die Zahlen zu rechtfertigen?

Vielen Dank im Voraus!

Antwort

7

Es gibt keinen besonders schönen Weg. Wenn Sie jedoch eine interne WRITE-Anweisung verwenden, um die Zahl in eine Textzeichenfolge zu konvertieren (die zuvor mit einer ENCODE-Anweisung ausgeführt wurde), und dann den Text zu bearbeiten, können Sie möglicherweise das tun, was Sie benötigen.

Zitiert http://rsusu1.rnd.runnet.ru/develop/fortran/prof77/node168.html

Eine interne Datei schreiben ist typischerweise verwendet, um einen numerischen Wert zu einem Zeichenfolge zu konvertieren, indem eine geeignete Formatspezifikation verwenden, zum Beispiel:

CHARACTER*8 CVAL 
    RVALUE = 98.6 
    WRITE(CVAL, '(SP, F7.2)') RVALUE 

Die WRITE Anweisung wird die Zeichenvariable CVAL mit den Zeichen "+98,60" füllen (beachten Sie, dass dort ist ein Leerzeichen an jedem Ende der Nummer, die erste, weil die Nummer ist rechtsbündig im Bereich der 7 Zeichen, die zweite, weil der Datensatz ausgekleidet ist, um die deklarierte Länge von 8 Zeichen).

Sobald eine Nummer in einen Zeichenfolge gedreht wurde, kann es weiter in den verschiedenen Arten verarbeitet werden beschrieben in Abschnitt 7 Dies macht es möglich, zum Beispiel Zahlen zu schreiben linksbündig in einem Feld, ...

+0

Ich hatte auf etwas eleganteres gehofft, aber schien sich auf eine ähnliche Lösung zu einigen. Danke für die Antwort @ubuntourist – mishaF

3

Dies ist einfacher mit Fortran 95, aber immer noch nicht trivial. Schreiben Sie die Zahl oder ein anderes Element in eine Zeichenfolge mit einer write-Anweisung (wie in der ersten Antwort). Dann verwenden Sie den Fortran 95 intrinsisch "ADJUSTL", um die nicht-leeren Zeichen der Zeichenfolge nach links anzupassen.

1

Wenn Sie wollen, ist whitespace zwischen Ausgabefeldern und nicht linksbündige Zahlen whitespace können Sie einfach den X Editierdeskriptor verwenden. Zum Beispiel

format(A20,4X,ES18.8,4X,A12,4X,ES18.8) 

wird 4 Leerzeichen zwischen jedem Feld und dem nächsten einfügen. Beachten Sie, dass der Standard für ein Leerzeichen 1X erfordert. Einige der aktuellen Compiler akzeptieren auch den nicht standardmäßigen X.

2

Und wirklich un-elegant ist meine Methode (ich programmiere wie eine Höhle Frau), nach dem Schreiben der einfachen Fortran Schreibformat (das ist nicht LJ), verwende ich eine Kombination aus Excel (CSV) und ultraedit, um die Leerzeichen zu entfernen Das gewünschte LJ wird direkt gefolgt von Kommas (die ich für mein spezifisches Importformat zu einer anderen Software benötige). BF