2016-10-16 2 views
1

Я использую Fortran, чтобы сделать подпрограмму для использования в программном обеспечении мелкой воды CFD.Невозможно прочитать номер из текстового файла

Я написал этот код для чтения и использования сохраненных значений.

PROGRAM hieto 

! Calcula la precipitacion efectiva en funcion del tiempo 
!IMPLICIT NONE 

real::a 

!Abrir CSV 
!OPEN(UNIT=10,FILE="datos.txt",FORM="formatted",STATUS="replace",ACTION="readwrite",ACCESS='sequential') 
open(unit=10, file='datos.txt') 

!Leer el archivo 
read(10, *, iostat=ios)a 
print*,ios 
print*, a 
close (UNIT=10) 

END PROGRAM hieto 

Мой текстовый файл datos, выглядит следующим образом

1 

2 

3 

Когда я запускаю код, как есть, я получаю следующие выходные данные

-1 
0.0000000000 
Process return 0 (0x0) execution time: 0.002 s 

первое число в строке один İŞ один не равен нулю, поэтому я не знаю, почему это происходит.

И если я удалить iostat=ios из заявления для чтения, я получаю следующее сообщение об ошибке:

At ine 13 (the line od the read stament) of file /home/Dropbox/scripts_tesis/fortran/hieto_telemac.f90 (unit=10, file=datos.txt') 
Fortran runtime error: end of file. 
Proceess returned 2 (0x2) 

Я прочитал некоторые ответы здесь, так что я попытался добавить end=3 в заявлении для чтения, а также закончить мой текст файл с пустой строкой в ​​конце. end=3 дает ошибку, говоря, что 3 не является определенной меткой, а пустая строка в текстовом файле ничего не делает.

Я использую компилятор ubuntu 16.04 LTS и Gfortran.

+0

спасибо за ответ, но я прочитал об этом и использую Как читать до конца файла (EOF)? часть этого Wiki Fortran (http://fortranwiki.org/fortran/show/FAQ). я изменил код, чтобы он запустился, но я уже пытался это сделать. –

ответ

4

Что происходит, так это то, что ваш файл пуст.

Убедитесь, что в этом каталоге действительно есть файл с именем datos.txt. Обратите внимание на точное название. datos.txt и только datos - это не то же самое.

Если вы попытались открыть его ранее с помощью прокомментированной команды, которая включает STATUS="replace", ваш старый файл был бы заменен.

И поскольку файл пуст, вы не сделали ничего полезного. Если iostat отличен от нуля, а ваш -1, то значение переменной, считанной, не определено. Таким образом, ваш a не определен. Опять же, потому что ваш файл пуст.

Кроме того, вы не можете просто вслепую положить end=3 в свой код, потому что вы видели его где-то на переполнении стека. Вы должны сначала понять, что он должен делать. Нет причин сочетать iostat= и end=. iostat вполне достаточен.

+0

ОК, спасибо, я попробую эти вещи. –

+0

ОК, что сработало, я ошибался в своем роде. еще раз спасибо. –

+0

И посмотрите, как я отредактировал ваше сообщение. Используйте капитал (большой) I для слова «я». Не помещайте пространство перед запятой (','). Начать предложения с большой (большой) буквы. Я совершенно уверен, что ваш родной язык имеет схожие правила. –

 Смежные вопросы

  • Нет связанных вопросов^_^