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

UserD

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

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
В таком виде нельзя

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

И через evalFile
 
  • Спасибо
Реакции: UserD

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
отдельном .ini файле
Файлы .ini предназначены для определения значений переменных, при этом имеют строго определённый формат, который не подразумевает функций.
Используйте расширение .jsxinc для отдельных файлов с кодом, а в основной файл скрипта подключайте с помощью директивы препроцессора: //@include "filename.jsxinc" или #include "filename.jsxinc". Первый способ оптимальнее, потому, что VS code, например, не дружит со вторым вариантом.
 

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Используйте расширение .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\"");
    }
и дальше не идёт
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Директива препроцессора указывается в самом начале кода.
JavaScript:
//@include "filename.jsxinc" //в кавычках - относительный путь к файлу, если в той же папке, просто имя файла

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

one();
Если включаемого файла нет, препроцессор выдаст ошибку.
 
  • Спасибо
Реакции: UserD

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Код:
$.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.
 

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Фух, Заработало!
Но, есть нюанс: если задавать
Код:
//@include "file.jsxinc";
все прекрасно работает. Если же указывать переменную var myIniFile = new File ( scrptfolder + "/file.jsxinc"), то
Код:
//@include myIniFile;
препроцессора ругается на отсутствие файла.
С этим можно, как-то справиться?
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
не, в препроцессоре никаких переменных и объектов. а зачем вам такие сложности на пустом месте?
 
Последнее редактирование:
  • Спасибо
Реакции: UserD

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
не, в препроцессоре никаких переменных и объектов
ясно.
а зачем вам такие сложности на пустом месте?
задача, чисто утилитарная: нужно прорисовать кучу графиков разных функций. Вот и хочется отделить код от самих функций - чисто для удобства. А вопрос про переменные в препроцессоре - это перфекционизм заговорил '))'

Всем, кто помог, ещё раз спасибо!
 

Oleg Butrin

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