如何避免_webout中的Linebreak?

时间:2015-06-16 08:55:33

标签: sas

我使用封装在HTML中的变量动态构建一个非常长的String。 然后我使用ods HTML _webout创建一个包含信息的HTML页面。 我的问题是,当String超过4096个字符时,它会进行换行。如果此换行符位于HTML-Command中,则会破坏我的页面。当我使用LRECL时,它将值限制为4096,无论我在那里使用哪个值。 Sascode:

/*Some data generating and other stuff first which is not important here*/
...
/*then the output*/
data _null_;
set myData;
file _webout LRECL=32767;
put somedata;
/* somedata is like '<table><tr><td>someinformation</td> <td>moreinformation</td>...<td>lastinformation</td></tr></table>*/
run;

如果我查看页面的源代码,可能会发生类似:

<tr><td>Info1</td><td>1</td><td>C</td><td>$1.</td></tr>...   ...<t
r><td>info80</td><td>10</td><td>C</td><td> </td></tr>

所以它在第4096个字符后断开并且没有正确地写入tr(或其他html代码,具体取决于Resultstring),这会导致显示输出错误。

我构建了一个解决方法,将输出字符串拆分为多个字符串,最大长度为4000,并将它们全部删除,但这不是一个很好的解决方案,有人可以给我一个如何解决这个更优雅的提示吗?

2 个答案:

答案 0 :(得分:2)

好的,我找到了解决问题的方法,但我不理解;(

这取决于webout的给定编码值,因此我使用Sas 9.3和IE8进行的测试得出以下结果:

   file _webout LRECL=32767;
limited result to 1024 characters per line
   file _webout encoding=utf-8 LRECL=32767;
limited result to 4096 characters per line
   file _webout encoding=ANY LRECL=32767;
no visible limitation in my test cases

因此,如果有人遇到同样的问题,他可以通过提供正确的编码值来使用解决方法。

但也许有人可以解释为什么输出线长度似乎只受编码值的影响,而不受lrecl语句的影响。

techsupport的回答是:

LRECL的工作原理如下,问题是浏览器规格,搜索浏览器选项,也许您可​​以激活或停用某些问题的解决方案。

我没有花时间寻找解决问题的浏览器选项,因为我们有许多不同的客户(大多数使用IE8)调用流程,我无法联系所有人并告诉他们如何更改浏览器< / p>

我的解决方法: 拆分较小部分的字符串或使用编码值。

答案 1 :(得分:1)

4096听起来像是用于查看的编辑器的限制。既然您已经编写了lrecl = 32767,我认为您不应该在任何时候出现HTML问题。请查看下面的示例,您可以在IE / Chrome / Firefox中查看来源,该行是连续的并且不会中断。我猜你是硬编码的值,当用于创建html表的编辑器获得4096 w / o wordwrap的行限制视图时,你会感觉到这条线是连续的,当你复制粘贴时在SAS存储过程中,您会在浏览器中显示中断

data _null_;
file _webout LRECL=32767;
put '<table><tr>';
do i =1 to 4000;
put '<td>' i 8. '</td>' @;
end;
put '</tr></table>';
run;