2013-10-09 4 views
1

Можно ли читать строку с многочисленными числами (целыми числами) с помощью Fortran?Как читать список целых чисел из строки ввода

позволяет сказать, что у меня есть файл только с единственной линией

1 2 3 

следующая программа читает 3 целых числа в строке

program reading 
implicit none 
integer:: dump1,dump2,dump3 

read(21,*) dump1,dump2,dump3 

end 

так dump1 = 1 dump2 = 3 dump3 = 3

Если у меня есть файл только с одной строкой, но с многочисленными целыми числами, например

1 2 3 4 5 6 7 8 ... 10000 

Возможно, вышеуказанная программа работает без определения 10000 переменных?

+0

Я отредактировал вопрос! –

ответ

3

РЕДАКТИРОВАТЬ Первый абзац этого ответа может показаться довольно странным, поскольку ОП изменил вопрос.

Ваше использование термина string изначально смутило меня, и я подозреваю, что он, возможно, вас тоже смутил. Неправильно думать о каких-либо символах в файле или вводить в командной строке в виде строки, но когда все эти символы являются цифрами (вкраплены пробелами), более полезно думать о них как integers. Система времени исполнения Fortran будет позаботиться о переводе строки цифр в целое число.

В этом свете я думаю, что ваш вопрос может быть лучше выражен как Как читать список целых чисел из строки ввода? Вот один из способов:

Определить массив. Здесь я определить массив фиксированного размера:

integer, dimension(10**4) :: dump 

(я часто использую такие выражения, как 10**4, чтобы избежать необходимости рассчитывать 0 с тщательно). Этот шаг, определяющий массив для захвата всех значений, кажется тем, который вам не хватает.

Чтобы прочитать эти значения из терминала, во время выполнения, вы можете написать

write(*,*) 'Enter ', 10**4, 'numbers now' 
read(*,*) dump 

и это установит dump(1) на первый номер вы набираете, dump(2) к второму, вплоть до 10**4 -м. Излишне говорить, что набирать это число номеров на терминале не рекомендуется, и лучше использовать их для чтения из файла. Который берет вас к вашему

read(21,*) dump 

Это не удивило бы меня найти, что система накладывает некоторые ограничения на длину одной линии, так что вы могли бы быть более сложным при попытке прочитать столько, сколько 10**4 целые числа, такие как чтение их в строках по 100 за раз, что-то вроде этого. Это легко

read(*,*) dump(1:100) 

будет читать 100 целых чисел в первые 100 элементов массива. Напишите цикл для чтения 100 строк по 100 целых чисел.

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