Димола Результаты checkModel()
checkmodel([Some Model])
открывает графический интерфейс "Сообщения Dymola", вкладку "Перевод" и отображает Errors
, Warnings
, а также Messages
,
Кто-нибудь знает, как записать эту информацию в лог-файл или получить их в качестве возвращаемого значения checkModel()
, Все, что я нашел в документации, было то, что checkModel()
возвращает только логическое значение успеха. Эти данные временно где-то сохранены?
Обратите внимание, что я хочу только подать заявку checkModel()
но на самом деле не переводить код.
2 ответа
Я наконец-то нашел решение по крайней мере для Dymola 2016 и новее, так что если кому-то интересно - вот оно (не очень удобное, но работает):
Ключ-команда getLastError()
который возвращает не только последнюю ошибку (как можно подумать...), но и все ошибки, обнаруженные checkModel()
а также общая статистика.
Вся информация собрана в одну строку, в которой последние строки выглядят так:
"[...]
Local classes checked, checking <[Some Path]>
ERROR: 2 errors were found
WARNING: 13 warnings were issued
= false
"
Следующие операции вернут количество фактических ошибок (для предупреждений оно более или менее одинаково):
b = checkmodel([Some Model])
s = getLastError()
ind1 = Modelica.Utilities.Strings.findLast(s,"ERROR:")
ind2 = Modelica.Utilities.Strings.findLast(s," errors were found")
nErrors = Modelica.Utilities.Strings.substring(s,ind1+6,ind2) //6 = len(ERROR:)
nErrors = Modelica.Utilities.Strings.replace(nErrors," ","")
nErrors
= "2"
Замечания:
- я использовал
findLast
насколько я знаю, интересующие линии находятся в самом конце строки. Так что это значительно быстрее, чем при использованииfind
- Это работает, только если строка "ОШИБКА:...." действительно существует. В противном случае
substring
вызов выдаст ошибку. - Конечно, это можно сделать в несколько строк, но, возможно, эту версию легче читать.
ПРИМЕЧАНИЕ. Это работает только с Dymola 2016 и новее. Возвращаемая строка getLastError
имеет другую структуру в Dymola 2015 и старше.
Следующее должно обработать это:
clearlog(); // Начать заново
Advanced.TranslationInCommandLog= TRUE;
checkModel(...); Сохранить системный журнал(...);
Это упоминается в Руководстве пользователя Dymola, том 1, раздел "Исследования параметров при запуске Dymola несколько раз в" пакетном режиме "" на стр. 630 или около того.