Есть ли какие-либо инструменты Java с открытым исходным кодом для синтаксического анализа вывода FORTRAN? Я хотел бы, чтобы иметь возможность написать что-то наподобиеАнализ выходных файлов FORTRAN с использованием Java
Format format = new Format("(1x, 2(F10.3,I3,' XY ',F7.3))");
String s = " -12345.897 XY 123.456-12345.897*** XY 123.456";
Result result = format.parse(s);
Обратите внимание, что это специально FORTRAN. Обратите внимание на забавные вещи, такие как конкатенированные поля, переполнения, пустое пространство = 0 и т. Д. Есть так много ошибок, что я не хочу их снова открывать!
КОММЕНТАРИЙ. Я не понимаю, почему это неправильный путь. Формат представляет собой сжатый способ генерации кода чтения. Альтернативой было бы жесткое кодирование для каждого формата. Если у меня есть файл с - скажем, 100 различных FORMAT-выходов, тогда у меня должно быть 100 кусков кода. С iChemLabs подходить я пишу:
List<Object> fields = FortranFormat.read(s, format);
и получить обратно Double Integer String, Double Double Integer Струнный Double
UPDATE: Я проверил iChemLabs на разумном количестве вещей. С пробелами он возвращает нулевые целые числа и парные разряды. С * это исключение (не необоснованное). Он может управлять несколькими линиями
fields = FortranFormat.read(" 1\n 2", "(I4/I4)");
возвращает 2 Целых (1 и 2)
UPDATE: Код iChemLabs специально позволяет пустой ввод (но не звездочки):
public void setReturnZeroForBlanks(boolean returnZeroForBlanks)
Set whether zeros are returned for blanks.
Parameters:
returnZeroForBlanks - the return zero for blanks
Я полагаю, я не понимаю, почему программа, которая читает вывод Fortran, должна использовать такой же форматированный механизм формата, чтобы читать его. Является ли вывод не всегда разделенным символом или фиксированной шириной? –
@TE, так как нужно как-то описать формат, и формат, используемый в приложении Fortran, который сгенерировал выход, предположительно доступен, будет удобно использовать одно и то же описание. И, как говорит OP, существуют тайные правила, регулирующие этот выходной формат, который он не хочет переделывать. –
@TE В этом примере после 897 есть 3 пробела. Они помещаются как целое число 0, а не строка пробелов. Есть еще хуже - FORTRAN имеет забавные вещи с десятичной численностью. –