Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [General] Создание файлов с разными именами


Автор: OlikFleur 27.10.2009, 18:22
Подскажите, пожалуйста!

В программе обсчитываю случаи для разных значений параметра. Надо записывать результаты в разные файлы, поэтому, естественно, хочу, чтобы название файла содержало значение параметра ( real(8) ). Как это сделать?
Я так понимаю, что в функции open(1,file=name,status='unknown') надо name определять как character name и его изменять (собственно интересует, какая функция тут нужна). 

Автор: FCM 27.10.2009, 19:16
Конечно впечатывать REAL(8)это вещь в себе. 

Предложу один вариант сходу (он не будет идеальным, но потом подправим)
с использованием конкатенации // и усечения пустых позиций TRIM.
Будем к базовому имени BASE добавлять суффикс из преварительно преобразованного в строку REAL(8) числа в фиксированном формате. 
Код

CHARACTER(50) :: BASE = 'NAME_', FINNAME, SUFFIX
REAL(8) :: X
X = SIN(1.D0)
WRITE( SUFFIX, '(F0.10)' )  X                   
FINNAME = TRIM(BASE)//TRIM(SUFFIX)


FINNAME используй в качестве имени файла.
Формат F0.10
Попробуй, напиши что получилось.


Автор: OlikFleur 27.10.2009, 20:14
Спасибо, все работает! smile 

Единственное замечание (вдруг кому-то пригодится).
Лучше делать так:

Код

CHARACTER(50) :: BASE = 'NAME_', FINNAME, SUFFIX, EXTENTION='.dat'
REAL(8) :: X
X = SIN(1.D0)
WRITE( SUFFIX, '(F0.10)' )  X                   
FINNAME = TRIM(BASE)//TRIM(SUFFIX)//EXTENTION


Примерно так... Тогда сразу же добавляется расширение файла...
Еще: я брала массив размера 100, так как мой длинный путь к файлу просто не влез в 50  smile 

Автор: popovda 27.10.2009, 20:20
А ещё удобнее для этих целей использовать iso_varing_string. Т.е. строки переменной длины. Исходник скачать можно, погуглив. Стандарт 95 part 2 (или 3).

Автор: FCM 27.10.2009, 20:45
OlikFleur,  или так

Код

CHARACTER(*), PARAMETER :: BASE = 'NAME_', EXTENTION='.dat'
CHARACTER(50) ::                    FINNAME, SUFFIX
REAL(8) :: X
X = SIN(1.D0)
WRITE( SUFFIX, '(F0.10)' )  X                   
FINNAME = BASE//TRIM(SUFFIX)//EXTENTION


Автор: FCM 27.10.2009, 21:40
Выше я вводил формат типа F0.xx , чтобы в SUFFIX не было пробелов слева.
Можно и нужно обойтись без этого ограничения на формат, применив функцию ADJUSTL

Код

CHARACTER(*), PARAMETER :: BASE = 'NAME_', EXTENTION='.dat'
CHARACTER(50) ::                    FINNAME, SUFFIX
REAL(8) :: X
X = SIN(1.D0)
WRITE( SUFFIX, * )  X                   
FINNAME = BASE//TRIM(ADJUSTL(SUFFIX))//EXTENTION

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)