2017-10-27 17 views
2

サーバー:Unixの、クライアント:私のコードのIEエッジ パート:SASのPROCストリーム:奇妙な改行が

%let P_debug_log = %str(<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>); 
proc stream outfile=_webout quoting=both resetdelim='_do' ASIS; 
BEGIN 
    %if "&_whattodo" ne "print" %then %do; 
    <script language='JavaScript' type='text/javascript'>          
     function subForm(f,v) { 
      if (v !== '') { 
       $('#'+ f).append('<INPUT TYPE="hidden" NAME="'+ v +'" VALUE="1">'); 
      } 
      $('#'+f).submit();  
      } 
     $(document).ready(function() {                
     $('#footButtons').append($('.footButton')); /* move all elements with class=footButton to pageFooter */ 
     $('#footMessage').append($('.footMsg')); 
     $('form.log').append("&P_debug_log."); 
     });                    
    </script> 
    %end; 
;;;; 

出力: 問題が予想されるところストリーム出力が改行「どこか」を持っていなく発生した、あります(オプションASISを使用すると、自分のコードのようにフォーマットする必要があります)。 予期せぬJavaScriptエラーが発生します。改行がJavaScript文字列内にある場合。 暗黙的なLRECL 1024があるようです。これは、linebreaksが期待どおりに設定されていればOKです。 ヒント?

これは元々フォーマットされた出力(ページのソース)です。

 <script language='JavaScript' type='text/javascript'>     function subForm(f,v) {   if (v !== '') {   $('#'+ f).append('<INPUT TYPE="hidden" NAME="'+ v +'" VALUE="1">');   }   $('#'+f).submit();    } 
     $(document).ready(function() {      $('#footButtons').append($('.footButton'));   $('#footMessage').append($('.footMsg'));   $('form.log').append(" 
<INPUT TYPE= 
'hidden 
' NAME= 
'_DEBUG 
' VALUE= 
'LOG 
' 
>");  });       </script> 
+0

がどのように見えますASIS/PRESCOLオプションのバグ。あなたはSASでそれを上げたいかもしれません。 – Tom

答えて

0

単にあなたがproc streamに追加したASISオプションを削除してください。

これは文書化されていない機能ですが、ドキュメントには表示されないので、私はそう仮定しています。

http://documentation.sas.com/?docsetId=proc&docsetVersion=9.4&docsetTarget=n12zrkr08eiacmn17lcv4fmt79tb.htm&locale=en

あなたは奇妙な改行が消えることを削除すると。

周囲を検索すると、ASISオプションが列の配置を維持しようとしているように見えます。

+0

ありがとうございます。私は http://support.sas.com/resources/papers/proceedings14/1738-2014.pdf を見つけましたが、あなたは正しいと思います。 ASISオプションを削除すると、改行数1024バイトまでのストリームが生成されます。 – derbestederbesten

1

ない私が答えを持っていますが、マクロは引用のように見える場合PROCストリームはにマクロ変数を分離させているものであることを確認してください複数の行。 だから私はこの簡単な例実行する場合:

%let P_debug_log = %str(<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>); 
filename tst temp; 
proc stream outfile=tst quoting=both resetdelim='_do' ASIS; 
BEGIN 
$('form.log').append("&P_debug_log."); 
;;;; 

を次に、それは、このファイルを生成:マクロ変数の値付近から%STR()を削除した場合

$('form.log').append(" 
<INPUT TYPE='hidden 
' NAME='_DEBUG 
' VALUE='LOG 
'>"); 

を、それが唯一の前に改行を挿入し、完全なマクロ変数の参照の後で、マクロ変数の引用符のまわりにもありません。

$('form.log').append(" 
<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'> 
"); 

あなたがquoting=bothオプションを削除する場合は、改行を使用すると、引用マクロを使用するかどうかにかかわらず、引用符の外になります。

$('form.log').append(
"<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>" 
); 
1

まずはお返事いただきありがとうございます。 ロバート・ペニッジが正しかった。 ソリューション: PROC STREAMを使用していて静的コード(私の場合:Javascriptのように)を含める場合は、%includeの代わりに& STREAMDELIM READFILEを使用してください。 理由:(!有効)、インラインコメント「//」が含まれるコードに(次の改行までコメント)がある場合、それは....予測できない結果に おかげで多くのことをリードする、 DBDB