2015-10-30 3 views
1

В Fortran90 я хотел бы задать формат вывода с использованием переменной. Мой код выглядит следующим образом:Стандартный формат вывода с использованием переменной

fileUnit = 14 
myFormat = '(10e18.10)' 
write (fileUnit,myFormat) myData 

Значение myFormat может быть любой разрешено для данного типа myData. Есть ли способ установить myFormat таким образом, что выход эквивалентно кодирование

write (fileUnit,*) myData 
+2

Вы хотите формат, эквивалентное '' *? Нет. Но, возможно, я не понимаю ваш вопрос. Что такое предложение * Значение myFormat может быть любым допустимым для типа myData. * Означает? –

+0

Я уверен, что вы знаете, но это должно быть 'myFormat = '(10e18.10)'' – agentp

+0

@VladimirF: Да, я в основном ищу формат, эквивалентный '*'. Выделенное предложение просто означает, что я хотел бы, чтобы 'myData' был любого типа данных, для которого определен стандартный вывод. –

ответ

1

Вы не можете использовать голую * в явной спецификации формата, как вы можете в read или write заявлении. В контексте явного форматирования * представляет группу unlimited-format-item, которая дает бесконечное количество повторов для группы форматированных элементов, а не для представления форматирования списка (см. Раздел 9.6.2.2, R915, Fortran 2008).

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

1

Если вы хотите, чтобы программно переключаться между явным и списком направленный формат, который вы могли бы сделать что-то вроде этого:

if(myFormat.eq.'*')then 
     write(unit,*)... 
else 
     write(unit,myFormat)... 
end if