Фортран дескрипторы ввода-вывода в Java? - PullRequest
1 голос
/ 03 февраля 2012

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

Проблема, с которой я сталкиваюсь, связана с дескрипторами Фортрана. Есть ли простой способ получить дескриптор типа E9.3 в объекте DecimalFormat в Java?

Имеющийся у меня десятичный формат работает только для чисел меньше 1. Для чисел <1, таких как 0.123, они записаны со знаком экспоненты, как 1.230E-01. Однако для чисел больше 1 (12,345) они записаны как 1.234E01, а не 1.234E + 01. Из того, что мне говорят, программа ожидает знак «+» как часть экспоненты. </p>

Строка DecimalFormat, которую я сейчас использую, это "# 0.000E00", и в настоящее время я пытаюсь выполнить некоторые манипуляции со строками, чтобы вставить туда знак "+" (после E, но перед цифрами), если необходимо. Должен быть лучший способ сделать это. Любая помощь будет оценена.

Ответы [ 3 ]

2 голосов
/ 03 февраля 2012

Вы действительно уверены, что вам это нужно? Может быть, это только расширение компилятора, но стоит проверить, действительно ли программа Fortran принимает вашу форму 1.234E01. Оба моих компилятора (gfortran и Solaris Studio) принимают их с дескриптором редактирования E9.3.

1 голос
/ 03 февраля 2012

Если у вас есть доступ к источнику программы на Фортране, вы можете изменить его на чтение входного файла, используя дескриптор *, например, если вы читаете в массиве data из значений n, например, измените это:

read(iUnit,'(10E9.3)') data(10)

что-то вроде:

read(iUnit, *) data(10)

или для записи файла в неотформатированном виде, а затем для чтения в двоичных данных.

0 голосов
/ 04 февраля 2012

Если вам нужно, чтобы вся строка состояла из 9 символов, это означает, что для десятичной части останется три символа.Вы можете выразить это с помощью printf стиля форматирования следующим образом:

groovy:000> String.format("%.3E", 0.000123456789)         
===> 1.235E-04
groovy:000> String.format("%.3E", 1234.56789)         
===> 1.235E+03

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

...