Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Создание файлов с разными именами, Название файла генерируется в программе 
V
    Опции темы
OlikFleur
Дата 27.10.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 23.10.2009

Репутация: нет
Всего: нет



Подскажите, пожалуйста!

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Конечно впечатывать 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
Попробуй, напиши что получилось.



Это сообщение отредактировал(а) FCM - 27.10.2009, 19:19
PM MAIL   Вверх
OlikFleur
Дата 27.10.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 23.10.2009

Репутация: нет
Всего: нет



Спасибо, все работает! 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 
PM MAIL   Вверх
popovda
Дата 27.10.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: нет
Всего: 6



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


--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
FCM
Дата 27.10.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



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


PM MAIL   Вверх
FCM
Дата 27.10.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Выше я вводил формат типа 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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0940 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.