2010-12-28 8 views
7

Sto scrivendo qualche output semplice in fortran, ma voglio delimitatori di spazi bianchi. Se utilizzare la seguente istruzione, tuttavia:Come posso giustificare a sinistra l'uscita numerica in fortran?

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

ottengo output come questo:

p001t0000    3.49141273E+01obsgp_oden  1.00000000E+00 

io preferirei questo:

p001t0000   3.49141273E+01 obsgp_oden 1.00000000E+00 

Ho provato ad utilizzare valori negativi per la larghezza (come in Python) ma senza dadi. Quindi, c'è un modo per giustificare i numeri a sinistra?

Molte grazie in anticipo!

risposta

7

Non c'è un modo particolarmente bello. Tuttavia, utilizzando un'istruzione WRITE interna per convertire il numero in una stringa di testo (precedentemente eseguita con un'istruzione ENCODE), e quindi la manipolazione del testo potrebbe fare ciò che è necessario.

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

Un WRITE file interno è tipicamente utilizzato per convertire un valore numerico in una stringa carattere utilizzando un idoneo specifica di formato , ad esempio:

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

WRITE la dichiarazione riempirà la variabile di carattere CVAL con i caratteri '+98.60' (notare che c'è è uno spazio vuoto a ciascuna estremità del numero , il primo perché il numero è giustificato nel campo, il secondo perché il record viene inserito nella lunghezza dichiarata di di 8 caratteri).

volta che un numero è stato trasformato in una stringa di caratteri può essere lavorato ulteriormente nei vari modi descritti nella sezione 7. Ciò rende possibile, per esempio, per scrivere numeri sinistra-giustificati in un field, ...

+0

Avevo sperato in qualcosa di più elegante, ma mi sembrava di accontentarsi di una soluzione simile. Grazie per la risposta @ubuntourist – mishaF

3

Questo è più facile con Fortran 95, ma non ancora banale. Scrivi il numero o altro elemento in una stringa con una dichiarazione di scrittura (come nella prima risposta). Quindi utilizzare "ADJUSTL" intrinseco di Fortran 95 a sinistra per regolare i caratteri non vuoti della stringa.

1

Se ciò che si desidera veramente è uno spazio bianco tra i campi di output anziché numeri con giustificazione a sinistra per lasciare spazi vuoti, è sufficiente utilizzare il descrittore di modifica X. Ad esempio

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

inserirà 4 spazi tra ciascun campo e il successivo. Si noti che lo standard richiede 1X per uno spazio, alcuni dei compilatori correnti accettano anche lo standard non X.

2

E il mio metodo davvero poco elegante (programma come una donna delle caverne), dopo aver scritto il semplice formato di scrittura Fortran (che non è LJ), uso una combinazione di Excel (csv) e ultraedit per rimuovere gli spazi ottenendo in modo efficace il LJ desiderato seguito direttamente da virgole (che ho bisogno per il mio specifico formato di importazione su un altro software). BF