Синтаксис 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. Он может сделать некоторые трюки с каталогами для вас.