2017-09-01 3 views
1

Ceci est mon code:lecture du fichier txt et de l'écriture Txt fichier

Program Input_Output 

Implicit none 

Integer::i 
Real::R_sn,X_sn,G_sn,B_sn 

Open(Unit=2,File='Input.txt',Status='Unknown') 

    Read(2,'(4(1x,En8.2))')R_sn,X_sn,G_sn,B_sn 

Close(Unit=2,Status='Keep') 

Open(Unit=4,File='Ouput.txt',Status='Unknown') 

    Write(4,'(4(1x,En8.2))')R_sn,X_sn,G_sn,B_sn 

Close(Unit=4,Status='Keep') 

End Program Input_Output 

Le contenu du fichier est Input.txt:

2.09E-01 1.17E-01 0.00E-00 1.16E-04

Le contenu du fichier est Output.txt:

******** ******** 0.00E+00 ********

Mon intention avec ce code est de lire quelques nombres de fichier et afther que je veux écrire ces nombres dans l'autre dossier dans la forme du dossier qui a été utilisé pour la lecture. Quel est le problème avec l'écriture dans le fichier Output.txt?

+0

Champ trop court (trop peu de caractères) dans les descripteurs. Utilisez simplement '(*, *)' ou plusieurs caractères. Beaucoup de doublons autour, ne peuvent pas les rechercher à partir de mon téléphone. –

+0

Je veux écrire des nombres dans le formulaire En8.2 à 'Outpu.txt'. En utilisant (*, *) j'ai reçu des nombres en forme de descripteur f –

Répondre

4

Vous recherchez le descripteur de données ES, qui écrit les résultats en «notation scientifique». Cela signifie un seul chiffre avant la décimale.

write(*,"(4(1x,es8.2))" R_sn, X_sn, G_sn, B_sn 
!! output: 2.09E-01 1.17E-01 0.00E+00 1.16E-04 

D'autre part, pour EN, ou « notation d'ingénierie », vous écrivez (jusqu'à) 3 chiffres avancés avant la décimale. Vous devrez donc développer le champ de sortie (suggéré par @VladimirF):

write(*,"(4(1x,en10.2))" R_sn, X_sn, G_sn, B_sn 
!! output: 209.00E-03 117.00E-03 0.00E+00 116.00E-06