2016-02-19 4 views
0

У меня есть файл данных, где некоторые строки начинаются с @, # и &. Файл также содержит столбец числовых данных. Мне нужен только столбец числовых данных.Пропуск входных строк с @, # и &

Итак, как написать программу Fortran для получения свежих данных, избегая строки, начинающейся с специальных символов?

Я пробовал с кодом, указанным в сообщении. Но он считывает только первую строку числовых данных, а не остальные строки.

@ target g0.s1   
@ type xysize 
0.05966 -70.06945 0.07000 
0.08949 -70.06946 0.07000 
0.11932 -70.06946 0.07000 
0.14915 -70.06946 0.07000 
0.17898 -70.06946 0.07000 
@ autoscale onread none 
@ target g0.s2   ` 

код

implicit none 

integer, parameter :: iu = 10 

real    :: x 

integer   :: ierr 

open (unit=iu,file="data.txt",action="read") 

do 

    read (iu,*,iostat=ierr) x 

    if (ierr == 0) exit 

end do 

print*,"x =",x 

end program xread_data 
+0

Прочитайте строку, посмотрите, присутствует ли символ или нет, выполните то, что вам нужно. Это все. Это действительно просто. Если вы хотите получить больше, вы должны показать свой код. –

+0

Похоже, что даже фильтра '[fortran *]' недостаточно, чтобы поймать все ошибочные вопросы. '[* fortran *]' необходимо. –

ответ

1

Если линия может содержали что-то другое, чем число, вы не можете прочитать их непосредственно как число, что просто должен потерпеть неудачу.

Итак, сначала вы должны прочитать строку в виде символьной строки.

Затем вы можете посмотреть на первый символ в этой строке строки, и если это комментарий, пропустите строку. Если нет, попробуйте прочитать номера из строки как из внутреннего файла.

character(1024) :: line 

open... 

do 
    read(iu, '(a)', iostat=ierr) line 
    if (ierr/=0) exit 

    if (line(1:1)=='@' .or. line(1:1)=='#' .or. line(1:1)=='&') cycle 

    read(line, iostat...) x1, x2, x3 

end do 

close... 
+0

действительно еще 9 ... –

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