Установить глобальный при выполнении в GAMS

#global #gams-math

#глобальный #gams-математика

Вопрос:

Рассмотрим, что я хочу выполнить для параметра (paramter1 и parameter2). Я делаю следующее:

 $onEcho > Textfile.txt
par = parameter1   rng = parameter1!A1
par = parameter2   rng = parameter2!A1
$offEcho

execute_unload 'export.gdx', parameter1 parameter2;
 

Но вместо того, чтобы писать эту строку два раза, могу ли я сделать что-то вроде этого:

 $setGlobal Parameter parameter1 parameter2

$onEcho > Textfile.txt
par = %parameter%   rng = %parameter%!A1
$offEcho

execute_unload 'export.gdx', %parameter%;
 

Однако этот код не работает. Как я могу указать мои параметры в одном месте вместо того, чтобы записывать их несколько раз?

Ответ №1:

В GAMS вы можете определять макросы, но для ваших целей $batInclude может быть лучше:

 $onEchoV > execUnload.inc
$echo par = %1   rng = %1!A1 > Textfile.txt
execute_unload 'export.gdx', %1;
$offEcho

$batInclude execUnload.inc parameter1
$batInclude execUnload.inc parameter2
 

РЕДАКТИРОВАТЬ: Теперь, когда я лучше понял ваш вопрос, после обсуждения его в комментариях, вот новое решение, использующее средство put:

 $setGlobal Parameter parameter1, parameter2

Set exportPars / %Parameter% /;

File fx / 'Textfile.txt' /;
put fx;


loop(exportPars,
   put 'par = ' exportPars.tl:0 '   rng = ' exportPars.tl:0 '!A1' /;
);

execute_unload 'export.gdx', %Parameter%;
 

Комментарии:

1. Спасибо. Однако у меня есть только параметр2 в моем файле GDX, когда я использую ваш код. Мне нужны как parameter1, так и parameter2. Я делаю что-то не так?

2. Извините, тогда я ошибся. Каждый batinclude запишет свой собственный файл gdx, поэтому второй перезапишет первый. То же самое должно произойти с Textfile.txt в моем коде. Итак, что вы на самом деле хотите в итоге, это один текстовый файл с двумя строками и один файл gdx с двумя символами?

3. Да, точно. 🙂

4. Отлично! Большое спасибо!

5. Один вопрос: если я хочу выполнить как файл .xlsx — например, вставив следующую строку в конце: «выполнить ‘gdxxrw export.gdx output=export.xlsx @Textfile.txt ‘», затем я должен запустить файлы два раза. Возможно ли получить файл Excel, запустив его только один раз?