Синтаксис SPSS - использовать путь к файлу

У меня есть куча файлов данных и синтаксиса SPSS, которые я перемещаю, ежедневно меняя папки. Однако относительные пути остаются прежними. Есть ли способ использовать этот факт? Например: используйте команду INCLUDE и укажите файл синтаксиса, который всегда на один уровень выше; или используйте GET, чтобы открыть файл, расположенный на два уровня вверх

Погуглив вокруг, я нашел какую-то ссылку на команду HOST, но я не совсем заставил ее работать.

Любой вклад будет оценен:)

Заранее большое спасибо

2 ответа

Решение

Вы можете получить относительный путь синтаксиса SPSS (при условии, что он сохранен), используя python.

SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath()

Из этого вы можете перейти к любой папке, которую вы хотите, используя питонов os модуль (или иначе). Ниже приведен пример получения сохраненного местоположения файла синтаксиса, а затем также следующие два уровня вверх. Он также возвращает макрос, содержащий соответствующие пути к папкам, которые хранятся в виде строк, чтобы впоследствии их можно было использовать в командах SPSS (таких как GET, INCLUDE и другие).

* Run this in any saved SPSS syntax to test *.
begin program.
import spss,spssaux,SpssClient, os
SpssClient.StartClient() 
synPathL0U = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath()) 
SpssClient.StopClient()
synPathL1U=os.path.dirname(synPathL0U)
synPathL2U=os.path.dirname(synPathL1U)
print "synPathL0U =",synPathL0U
print "synPathL1U =",synPathL1U
print "synPathL2U =",synPathL2U
spss.SetMacroValue("!synPathL0U",spssaux._smartquote(synPathL0U+"\\"))
spss.SetMacroValue("!synPathL1U",spssaux._smartquote(synPathL1U+"\\"))
spss.SetMacroValue("!synPathL2U",spssaux._smartquote(synPathL2U+"\\"))
end program.

/* Check results - Echo should relay back the desired folder paths */.
echo !synPathL0U.
echo !synPathL1U.
echo !synPathL2U.

Удобный способ реализовать это, чтобы обернуть все это в небольшую пользовательскую команду расширения, чтобы избежать этого стандартного шаблона во всех ваших синтаксисах.

Для этого достаточно просто скопировать приведенный выше код между BEGIN PROGRAM / END PROGRAM в функцию Run(args) в файл Python, называемый, скажем, SET_JOB_CWD.py, Имя, присвоенное файлу здесь, является релевантным и будет тем, что будет использовано позже для вызова этой команды расширения.

Так SET_JOB_CWD.py будет содержать:

def Run(args):
   import spss,spssaux,SpssClient, os
   SpssClient.StartClient() 
   synPathL0U = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath()) 
   SpssClient.StopClient()
   synPathL1U=os.path.dirname(synPathL0U)
   synPathL2U=os.path.dirname(synPathL1U)
   spss.SetMacroValue("!synPathL0U",spssaux._smartquote(synPathL0U+"\\"))
   spss.SetMacroValue("!synPathL1U",spssaux._smartquote(synPathL1U+"\\"))
   spss.SetMacroValue("!synPathL2U",spssaux._smartquote(synPathL2U+"\\"))

Затем также создание соответствующего SET_JOB_CWD.xml файл, содержащий следующий код:

<Command xmlns="http://xml.spss.com/extension" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="SET JOB CWD" Language="Python">
</Command>

Затем эти два файла должны быть сохранены везде, куда направляются ваши файлы расширения (чтобы узнать, где находится эта папка, запустите SHOW EXTPATHS. в синтаксисе SPSS местоположение, отображаемое для "EXTPATHS EXTENSIONS", является этой папкой.

Теперь, когда у вас есть сохраненный синтаксис в SPSS. Вы можете просто запустить SET JOB CWD. и он вернет макросы SPSS !synPathL0U,!synPathL1U,!synPathL2U содержащий соответствующие папки, хранящиеся в виде строки.

В v21 (бесплатный) плагин Python является отдельной загрузкой. Он полностью интегрирован в v22.

С Python и R Essentials вы получаете набор команд расширения, которые работают как собственные команды, включая интерфейс диалогового окна. Один, который вы могли бы найти полезным, - это STATS OPEN PROJECT. Он позволяет вам определить проект или набор связанных проектов и автоматически загружать или выполнять вспомогательные файлы при запуске или при вызове команды.

В v21-22 вам необходимо установить это с сайта сообщества SPSS. Более подробная информация доступна при необходимости.

Я бы избежал команды INCLUDE, кстати. Используйте более новую команду INSERT. Он может сделать некоторые трюки с каталогами для вас.

Другие вопросы по тегам