Считать данные в Фортране

nataurban

Есть текстовый файл, в котором записаны вещественные числа вида 18.2791748046875. Числа записаны по 30 штук в строчку через запятую. Как их считать, скажем, в массив длиной 30? Конкретно, затруднение возникает с форматированием

starmaster

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

nataurban

проблема №1: файл приготовил не я.
проблема №2: в файле 2400 строк

starmaster

№ 1: Тогда пробуй второй вариант.
№ 2: А в чем тут проблема?

vovatroff

Записи регулярные? Я имею в виду, одинакова ли длина у всех чисел? Если да, то поможет форматное считывание типа
DO i=1, 2400
READ( №канала, '(30(F18.12,3x' ) (A(i,k k=1,30)
ENDDO
(формат взят от балды, просто для примера).
Должен быть описан двумерный массив A, строки которого длины 30, количество строк 2400.

nataurban

№ 2: А в чем тут проблема?
в том, что запятые исправить на пробелы не получится )

nataurban

насколько я знаю, так можно писать в фортране 90. Я пишу на 77м

starmaster

Какие проблемы прогнать такой маленький файл через фильтр?

starmaster

А в чем проблема писать на 90-м?

vovatroff

Ерунда. Это - классический образец фортрана 77.
Если хочется совсем "целомудренной" программы, отмени неявный цикл, замени на
вложенный, и вынеси описание формата в отдельный оператор FORMAT, снабдив меткой.
И тогда можешь опробовать хоть на БЭСМ-6

nataurban

Какие проблемы прогнать такой маленький файл через фильтр?
поясни чайнику плиз, о чем ты говоришь
А в чем проблема писать на 90-м?
Кластер его не понимает. Почему?Вопрос не ко мне.

nataurban

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

vovatroff

>А вот неявные циклы в f77 по-моему все-таки не катят
Проверь. По-моему, 77-й про них знает. Равно как и про ENDDO.
Вариант со вложенным циклом - тогда надо внутри формата после считывания каждого числа
ставить вот такой слэш: \ , что означает "остаться на прежней строке". Принудительный переход к новой строке - слэш в другую сторону: /. Хотя вот это все как раз в 77-м может и не поддерживаться, не уверен.

nataurban

Равно как и про ENDDO.
а какая разница между end do и continue?

starmaster

continue - более гибкий вариант, но и более подверженный ошибкам.
Поэтому от него и отказались.

starmaster

Пишешь программу, которая читает текст из одного файла и пишет в другой, а по пути меняет запятые на пробелы (или еще что делает).
Если использовать для этого готовый парсер - достаточно будет написать шаблон замены - например, пару регулярных выражений.

vovatroff

а какая разница между end do и continue?
Принципиальной - никакой. Вопрос удобства.
>А вот неявные циклы в f77 по-моему все-таки не катят
Проверь. По-моему, 77-й про них знает. Равно как и про ENDDO.
Я уточнил у более опытных пользователей: в 77-м стандарте все это есть,
включая неявные циклы и ЭНДДУ. Причем люди знают это не из книжек, а по
опыту сборки программ современными компиляторами типа gcc.
Так что будь спок.

Jeton89

Кластер его не понимает. Почему?Вопрос не ко мне.
Не понимает компилятор. Кластер здесь не причем. Ежели ты пишешь под кластер, значит наверняка нужна скорость. Тогда сразу встает вопрос, зачем использовать устаревшие компиляторы?
ПОРА, ПОРА переходить на современный фортран! Забейте на научников, которые отстали от жизни. И т.д. и т.п.
Ну это так, наболело =)
По теме. Берешь Блокнот, WordPad или еще чего похуже. Нажимаешь Ctrl+H. В строке что заменить пишешь ",". В строке на что пишешь " ". (Файл, как я понял, один, поэтому один раз можно это сделать ).
А дальше берешь и считываешь и радуешься жизни.

vovatroff

Знаешь, этот современный фортран, на мой вкус, больше похож на какой-то Си,
чем и мерзок.
Вообще, зачем было делать из языка высокого уровня какой-то шаманский
метаязык? Сей и ассемблеров не хватало?
БЛАГО, что современные компиляторы по-прежнему поддерживают большинство
стандартов 77-го фортрана. Покуда это так, фортран останется фортраном.

Jeton89

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

О вкусах не спорят =)
Вообще, зачем было делать из языка высокого уровня какой-то шаманский
метаязык? Сей и ассемблеров не хватало?

Затем, что технологии программирования развиваются. ООП сегодня - это норма. Хотя в овременном фортране ООП и не представлено полностью =(. Перфокарты отошли в прошлое. Фиксированный формат уже не нужен. А писать на языке, который был ориентирован на технологии сорокалетней давности - это безнадежно отстать от жизни.
Покуда это так, фортран останется фортраном.

Фортран УЖЕ не тот фортран.

vovatroff

О вкусах не спорят =)
+1

spiritmc

> по пути меняет запятые на пробелы
sed 's/,/ /g' input > output
cat input | sed 's/,/ /g' > output
---
"Аллах не ведёт людей неверных."

spiritmc

> БЛАГО, что современные компиляторы
Oh sure, some computer vendors have come out with Fortran 77 compilers,
but every one of them has a way of converting itself back into a Fortran 66 compiler
at the drop of an option card --- to compile DO loops like God meant them to be.
---
"Аллах не ведёт людей неверных."

nataurban

По теме. Берешь Блокнот, WordPad или еще чего похуже. Нажимаешь Ctrl+H. В строке что заменить пишешь ",". В строке на что пишешь " ". (Файл, как я понял, один, поэтому один раз можно это сделать ).
А дальше берешь и считываешь и радуешься жизни.
Да, вот это реальный совет! Спасибо

vovatroff

Да, вот это реальный совет! Спасибо
Да, написать пару строк на фортране действительно
гораздо сложнее
Оставить комментарий
Имя или ник:
Комментарий: