[AI CC-CC2022] Функция в .ini файле. Как?

  • Автор темы Автор темы UserD
  • Дата начала Дата начала

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Прошу сильно не пинать за незнания.
Имеется скрипт, выполняющий вычисления неких функций. Саму функцию хочу определить в отдельном .ini файле, типа:
INI:
var f = Math.cos(i);
Как собственно подключить этот .ini файл в скрипт? А то как-то не получается :(
 
В таком виде нельзя

var function foo(bar)
{
return Math.cos(bar)
}

И через evalFile
 
  • Спасибо
Реакции: UserD
отдельном .ini файле
Файлы .ini предназначены для определения значений переменных, при этом имеют строго определённый формат, который не подразумевает функций.
Используйте расширение .jsxinc для отдельных файлов с кодом, а в основной файл скрипта подключайте с помощью директивы препроцессора: //@include "filename.jsxinc" или #include "filename.jsxinc". Первый способ оптимальнее, потому, что VS code, например, не дружит со вторым вариантом.
 
Используйте расширение .jsxinc для отдельных файлов с кодом, а в основной файл скрипта подключайте с помощью директивы препроцессора: //@include "filename.jsxinc" или #include "filename.jsxinc".
Собственно, затык у меня здесь приключился:
Код:
    var myIniFile = new File ( File($.fileName).path + "/file.ini");
    if (!myIniFile.exists) {
        alert ("Не найден файл с описаниями функций!\r" +myIniFile);
        exit();
    } else {
        eval ("//@include \"myIniFile\"");
    }
и дальше не идёт
 
Директива препроцессора указывается в самом начале кода.
JavaScript:
//@include "filename.jsxinc" //в кавычках - относительный путь к файлу, если в той же папке, просто имя файла

function one() {
    $.writeln("что-нибудь из включенного файла")
}

one();
Если включаемого файла нет, препроцессор выдаст ошибку.
 
  • Спасибо
Реакции: UserD
Код:
$.evalFile (file: File , timeout: number ):any
Core JavaScript Classes
Loads and evaluates a file.
file: Data Type: File
The file to load.
timeout (optional): Data Type: number , Default Value: 10000
An optional timeout in milliseconds.
 
Фух, Заработало!
Но, есть нюанс: если задавать
Код:
//@include "file.jsxinc";
все прекрасно работает. Если же указывать переменную var myIniFile = new File ( scrptfolder + "/file.jsxinc"), то
Код:
//@include myIniFile;
препроцессора ругается на отсутствие файла.
С этим можно, как-то справиться?
 
не, в препроцессоре никаких переменных и объектов. а зачем вам такие сложности на пустом месте?
 
Последнее редактирование:
  • Спасибо
Реакции: UserD
не, в препроцессоре никаких переменных и объектов
ясно.
а зачем вам такие сложности на пустом месте?
задача, чисто утилитарная: нужно прорисовать кучу графиков разных функций. Вот и хочется отделить код от самих функций - чисто для удобства. А вопрос про переменные в препроцессоре - это перфекционизм заговорил '))'

Всем, кто помог, ещё раз спасибо!
 
Если же указывать переменную
Не нужно дополнительно мудрить. Препроцессор автоматически подставляет код из подключаемого файла. Если файла нет, то сам препроцессор выдаст ошибку.
Можно попробовать директиву завернуть в try..catch. Не знаю, сработает или нет.
 
  • Спасибо
Реакции: UserD