2016-10-27 114 views
0

我試圖從SAS內部生成一個腳本。不幸的是,我需要寫行SAS:引用問題

strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" _ 
     & "<script>FILE.click();new ActiveXObject('Scripting.FileSystemObject')" _ 
     & ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""" 

寫劇本到文件中,我使用以下方法:

/* write the script to file */ 
filename outfile ".\temp.vbs"; 
data _null_; 
    file outfile; 
    put 'WScript.Echo "Hello, World!"'; 
run; 

/* run the script */ 
data _null_; 
    call system(".\temp.vbs"); 
run; 

/* housekeeping */ 
%let rc=%sysfunc(fdelete(outfile)); 
%symdel rc; 
filename outfile clear; 

不幸的是,put語句不善待&' ,和"。我嘗試了所有macro quoting functions,但無法獲得任何工作。如有必要,我可以使用重載的連接運算符+而不是&。由於ActiveXObject('Scripting.FileSystemObject')上的單引號,這樣做只會在中間線上留下一個錯誤。有任何想法嗎?

回答

1

不知道我明白這個問題。在文字字符串的外部使用單引號而不是雙引號可以避免需要擔心類似於&%這樣的宏觸發器,但您仍然需要將需要生成的任何文字單引號字符加倍。

put 
'strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" _' 
/'  & "<script>FILE.click();new ActiveXObject(''Scripting.FileSystemObject'')" _' 
/'  & ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>"""' 
; 

你也可以將你的字符串文字分解爲多個字符串文字,併爲每個文字使用不同的外部引號。

put 
'strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" _' 
/'  & "<script>FILE.click();new ActiveXObject(' 
"'Scripting.FileSystemObject'" 
')" _' 
/'  & ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>"""' 
; 
+0

謝謝!我不知道我可以使用雙單引號來防止外單引號關閉。我也不知道可以使用'/'來插入回車符。你碰巧知道我可以在SAS文檔中找到這些解釋嗎? –

+0

查看PUT語句的手冊頁。查找行指針控件的部分。在SAS語言中查找單詞的概念頁面。 http://support.sas.com/documentation/cdl/en/lrcon/68089/HTML/default/viewer.htm#p1qge1g4ytqq41n1e8x8s7ugmyst.htm – Tom