Mottle
Спасибо, на таком модельном массиве хорошо работает. А Вы не знаете, что делать, если в файле помимо чисел имеются символы? В этом случае такая программа выдает ошибку (потому что массив из действительных чисел).
Уточните хотя бы структуру файла. Лично у меня есть подозрения, что такой файл в Вашем случае формируется прибором и имеет некоторый заголовок, после которого идут численные данные. Например:
Код:
Эксперимент от 32 февраля 2011 года.
Тип эксперимента: Определение предела растяжимости резинки от трусов
Данные:
относительное удлинение - модуль упругости - абсолютное удлинение
0.12 0.55 1.23
1.56 4.33 1.63
9.24 3.11 7.09
.............
То есть у Вас есть
n cтрочек заголовка, а дальше
m строчек c данными. Соответственно, объявляем довольно обширную строковую переменную, и запихиваем в нее всю читаемую строку. Поскольку разбираться с заголовком мы точно не будем, то каждый раз при чтении мы будем все читать в одну и ту же переменную. Пусть данные перезаписываются, нам не жалко.
Еще момент: в ту же строковую переменную имеем полное право читать и строчки с данными, если они вдруг нам не нужны. Опять же, данные эти мы разбирать не будем, они просто теряются.
А в читаемых правильно (как числа) данных мы выбираем только второй столбец.
Mottle предложил для этого абсолютно корректное решение, которое, кроме того, в две секунды видоизменяется на тот случай, когда надо выбрать, скажем, только третью колонку. Но можно поступить варварски и опять же читать все ненужные числа в некие буферные переменные, данные из которых никак не обрабатывать - они перезапишутся и потеряются. Ну и из лентяйства примем, что в каждой строке данных, принимаемых на ввод,
ровно 3 числа. Как в поставленной задаче. Такой ленивый вариант тоже может быть переделан на другой столбец или другое число данных в строке, но потребуется уже не 2 секунды. Ну, секунд 10, наверно. Так что право на жизнь имеет!
Дополнительно: предполагается, что числа
n и
m (сколько строк пропускаем и сколько обрабатываем) вводятся с клавиатуры. Пояснения к вводу будут выведены
транслитом. Почему? Русский шрифт в консольном окне должен быть в DOS-кодировке, не разбирающиеся в нюансах люди могут и редактора подходящего для этого не найти. Блокнот из Windows не подходит!
В принципе, эти же два числа можно приписать впереди начала файла и обойтись без консоли, надо только программу соответствующим образом переписать.
program readcolumn
implicit none
integer :: j, m, n, ios
real, allocatable :: x(:)
real :: d1, d2 ! dummy variables
character (len=255) :: stroka ! dummy string variable
write(*,*) 'Vvedite chislo strok zagolovka'
read(*,*) n
write(*,*) 'Vvedite chislo chitaemyh strok'
read(*,*) m
allocate(x(m))
open(11, file='inp.txt', status = 'old', iostat = ios) ! номерок 2 зарезервирован! Я взял 11 :)
! Начинаем наши грязные делишки!
do j = 1,m+n ! реально читаем заголовок + m нужных строк
if(j.le.n) then
read(11,*) stroka
else
read(11,*) d1, x(j-n), d2
end if
end do
!............................................
! Тут как-то выводим получившийся массив. Можно, как предложил Mottle:
write(*,"(f6.2,1x)")x ! кстати, оператор должен работать, хоть и сидит весь среди комментариев!
!..............................................
deallocate(x) !освобождаем память
close(11)
end program
Компилировать не пробовал