2017-09-03 1 views
1

Quand je tente de lire un fichier txt avec l'exemple de code suivant:Fortran ne peut pas lire les fichiers txt créés par un autre programme

double precision inp(100) 
open(1,file='whatever.txt') 
do i=1,100 
read(1,*) inp(i) 
enddo 
close(1) 

Le programme se termine juste au moment où il arrive à la phrase de lecture. J'ai essayé d'autres façons d'écrire la boucle, comme

do 
read(1,*) inp 
enddo 

mais c'est la même chose. La partie amusante est que si j'écris un txt avec fortran ou à la main et que j'essaie de le lire, ça marche !!

Je suis désespéré, s'il vous plaît, aidez-moi.

+0

Avez-vous essayé d'utiliser une unité supérieure à 10? Vous utilisez 1, qui pourrait déjà être pris par quelque chose comme standard dans ou quelque chose comme ça. – chw21

+1

cela devrait être fermé que le problème a été résolu et apparemment sans rapport avec le code. – agentp

Répondre

0

Voici quelques idées:

  1. Prenez un numéro d'unité de 10 ou plus, 1 pourraient être prises par quelque chose comme défaut i/o
  2. Utilisez iostat et iomsg pour savoir pourquoi la lecture échoue:

    integer :: iostat 
    character(len=100) :: iomsg 
    
    read(unit=u, fmt=*, iostat=iostat, iomsg=iomsg) inp(i) 
    if (iostat /= 0) then 
        print *, "Error reading inp" 
        print *, "i was ", i 
        print *, "Error was: ", trim(iomsg) 
    end if 
    
+0

A la fin j'ai changé une propriété du fichier et ça marche, mais merci. –

+0

Je ne peux vraiment pas recommander l'ajout de tout ce code de traitement supplémentaire 'iostat' pour vous donner une version plus simple du message d'erreur que le système vous donnerait par défaut. – agentp

+0

Même si vous ne vous souciez pas de la gestion de 'iostat' ajoutée pendant le fonctionnement normal, je pense toujours que c'est très utile pour le débogage. Par exemple, sans cette manipulation, vous n'obtiendrez pas la valeur de «i» quand il se bloque. – chw21