Я пытаюсь использовать fortran для записи файла с разделителями-запятыми для импорта в другой коммерческий пакет. Проблема в том, что у меня есть неизвестное количество столбцов данных. Мой выход должен выглядеть следующим образом:Оператор формата с неизвестными столбцами
a_string,a_float,a_different_float,float_array_elem1,float_array_elem2,...,float_array_elemn
что привело бы к чему-то, что могло бы выглядеть следующим образом:
L1080,546876.23,4325678.21,300.2,150.125,...,0.125
L1090,563245.1,2356345.21,27.1245,...,0.00983
У меня есть три вопроса. Во-первых, я бы предпочел, чтобы элементы были плотно сгруппированы (переменная ширина столбца), два, я не знаю, как определить переменное число элементов массива в инструкции формата, и три элемента массива могут охватывать большой диапазон - возможно, на 12 порядков. Следующий код концептуально делает то, что я хочу, но переменная «п» и отсутствие столбца ширины определения выдает ошибку (конечно):
WRITE(50,900) linenames(ii),loc(ii,1:2),recon(ii,1:n)
900 FORMAT(A,',',F,',',F,n(',',F))
(следует отметить, что п фиксируется время выполнения .) Оператор записи делает то, что я хочу, когда я делаю WRITE (50, *), за исключением того, что он ограничен шириной.
Я думаю, что эта нить почти ответила на мой вопрос, но я довольно смутился: SO. Прямо сейчас у меня есть сценарий оболочки с awk, который исправляет проблему, но это решение ... неэлегантное. Я мог бы сделать некоторые манипуляции, чтобы сделать вывод строкой, а затем просто написать ее, но я бы предпочел избежать этой опции, если это вообще возможно.
Я делаю это в Fortran 90, но мне нравится пытаться сохранить мой код как можно более обратной совместимости.
Я также должен отметить, что причина, по которой мне нужны жесткие столбцы, двояка: одна, то есть желаемый вход для следующей программы и два размера. В результирующем выходном файле может быть несколько миллионов строк со многими десятками столбцов. Пространства имеют значение! Спасибо –