Код в ответе @ Steve является самым простым, который может выполнить то, что вы хотите.Если вы хотите его в одну строку , вы можете просто
do i=1,3 ; read(fd,*) matrix(i,:) ; end do
Если вы ищете способ ", прочитайте только два ввода записи и перейдите кследующая строка " только с одним оператором , то есть, насколько мне известно, невозможно: поскольку ваши реальные значения имеют разные форматы, вам нужно использовать ввод по списку (звездочка в формате) для чтения нескольких строк с одним и тем же оператором (все другие форматы для вещественных чисел требуют положительной ширины для ввода, и так как ваши действительные значения имеют различную ширину, любая спецификация ширины приведет к ошибке времени выполнения).
Если вы хотите использовать только один оператор, вам нужно будет явно указать программе, что нужно прочитать две строки в конце каждой строки, даже если они отбрасываются (в противном случае программа попытается запустить строку в вещественное число, иэто приведет к ошибке во время выполнения):
character(len=10) :: r
read(1,*) (a(i,:),r,r,i=1,3)
Это менее общий код, чем код @ Steve (требуется, чтобы у вас было ровно 2 строки символов на строкуд) и фактически требует дополнительного объявления символьной переменной.
Наконец, обратите внимание, что вы не читаете массив в порядке следования элементов: в Фортране порядок элементов массива в памяти равенa(1,1)
, a(2,1)
, a(3,1)
, a(1,2)
и т. Д. Если фактические массивы, которыми вы планируете манипулировать, намного больше, порядок индексов может существенно повлиять на производительность, поскольку последовательный доступ к памяти может затрагивать удаленные частипамяти, а не смежные части этого.Когда вы пишете программу на Фортране, как и на любом другом языке (который может использовать другой порядок), вам необходимо подумать о порядке индексов массивов.