스크립팅: 스크립트 자체의 (절대) 경로 얻기<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요 JMP 사용자 여러분,
스크립트 파일과 같이 동일한 디렉토리에 있어야 하는 여러 파일을 사용하는 스크립트를 작성하고 있습니다. 현재 "현재 디렉토리 가져오기" 명령을 사용하여 이러한 파일에 액세스하고 있습니다. 슬프게도 이 기능은 사용자가 탐색기에서 스크립트를 두 번 클릭하여 JMP 인스턴스를 연 경우에만 작동합니다.
JMP가 이미 실행 중이고 사용자가 파일 -> 열기 -> ...를 통해 스크립트를 연 경우. 현재 디렉터리는 스크립트 파일의 경로가 아닌 JMP 설치 경로입니다.
이 문제를 해결하기 위해 스크립트 파일의 경로를 얻는 방법이 있습니까?
감사해요,
세바스찬
Re: 스크립팅: 스크립트 자체의 (절대) 경로 얻기JMP를 처음 접하고 비슷한 문제를 해결하려고 시도하는 동안 이 함수를 직접 찾았기 때문에 이 함수가 얼마나 오래 사용되었는지 잘 모르겠습니다. 하지만 "Include File List()" 함수가 다음 목록을 반환하는 것 같습니다. 실행 스크립트의 컨텍스트에 있는 파일을 엽니다. (그런데 이 기능에 대한 설명은 Scripting Index 또는 온라인 리소스에 있는 대부분의 기능/메서드/메시지의 경우와 마찬가지로 일종의 정보 제공에 불과합니다.)
스크립트에서 다른 항목을 열기 전에 이 함수가 스크립트의 맨 위에서 실행되면 해당 지점에서 반환되는 유일한 경로이므로 스크립트 파일 경로와 스크립트 파일 이름을 추출할 수 있는 것으로 보입니다.
JMP에서 다른 파일을 연 상태에서 테스트 했을 때 Windows 탐색기에서 스크립트를 두 번 클릭하여 실행했습니다(스크립트는 스크립트 상단에 "//!"를 포함하여 스크립트 편집기 창을 열지 않고 열린 상태에서 실행하도록 설정) ), 해당 스크립트의 경로만 반환됩니다. 열려 있는 다른 파일은 반환되지 않습니다.
Re: 스크립팅: 스크립트 자체의 (절대) 경로 얻기제대로 생각하지 못한 정규식으로 ... 아마도 충분할 것입니다 ...
txt = runprogram(executable("net"), options({"use"}), readfunction("text"));
show(regex(txt,"U:[ \t]*([^ \t]*)","\1")); // find the "U:" drive
정규식 앞에 txt 값은 다음과 같습니다.
"New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
U: \\network\root\u\chales Microsoft Windows Network
The command completed successfully.
"
정규식은 이것을 캡처합니다.
Regex(txt, "U:[ \t]*([^ \t]*)", "\1") = "\\network\root\u\chales";
정규식의 두 번째 인수는 패턴입니다.
U:, 0개 이상의 공백 또는 탭, 공백 또는 탭이 아닌 0개 이상의 문자를 찾습니다. 마지막 비트는 괄호에 있으며 캡처 그룹 \1을 형성하며 정규식의 결과를 지정하는 세 번째 인수이기도 합니다.
Re: 스크립팅: 스크립트 자체의 (절대) 경로 얻기
@pmroz 쓴 :
이것은 당신이 원하는 것을 할 수 있습니다:
기본 디렉토리 가져오기()
"/M:/myapplication/bigdata/"와 같은 슬래시이기 때문에 보통 첫 번째 문자를 제거합니다.
app_path = Substr(Get Default Directory(), 2, 999);
이 솔루션은 다음과 같은 경우에 실패합니다. HTML 문서의 하이퍼링크를 통해 스크립트 또는 응용 프로그램이 실행되는 경우 Get Default Directory()가 웹 브라우저에서 만든 임시 폴더를 반환할 수 있습니다.
Re: 스크립팅: 스크립트 자체의 (절대) 경로 얻기고마워 톰.그거 좋은 생각이야!
이제 "net use"가 Windows 환경 변수였으면 좋겠고 다음과 같이 간단히 사용할 것입니다. 환경 변수 가져오기("NETUSE")(물론 작동하지 않음).디제이
Re: 스크립팅: 스크립트 자체의 (절대) 경로 얻기일반 SAS에서 Windows(DOS) 명령 "net use"의 출력을 구문 분석하여 특정 드라이브 문자에 매핑된 볼륨을 찾았습니다.
Re: 스크립팅: 스크립트 자체의 (절대) 경로 얻기Get Default Directory()는 훌륭하게 작동합니다....사용자가 네트워크 드라이브(예: X:\mynetworkpath\test.jsl)를 매핑하는 경우는 제외됩니다.그런 다음 전체 경로가 아닌 잘린 경로를 얻습니다(예: \\yournetwork.jmp.com\blahblah\mynetworkpath\test.jsl).
이 문제를 해결하는 방법을 아는 사람이 있다면 매핑된 경우에도 실제로 전체 경로를 읽는 방법입니다. 알려주세요!thx..dj
Re: 스크립팅: 스크립트 자체의 (절대) 경로 얻기그게 다야!
감사해요!
Re: 스크립팅: 스크립트 자체의 (절대) 경로 얻기이것은 당신이 원하는 것을 할 수 있습니다:
기본 디렉토리 가져오기()
"/M:/myapplication/bigdata/"와 같은 슬래시이기 때문에 보통 첫 번째 문자를 제거합니다.
app_path = Substr(Get Default Directory(), 2, 999);