SASUnit Examples  Version 1.3.0
_reportloghtml.sas
Go to the documentation of this file.
1 
33 %MACRO _reportLogHTML(i_log =
34  ,i_title = SAS-Log
35  ,o_html = 0
36  ,r_rc = logrc
37  );
38 
39  %LOCAL
40  l_macname
41  l_log
42  l_html
43  l_error_count
44  l_warning_count
45  l_curError
46  l_curWarning
47  l_sIgnoreLogMessage01
48  ;
49 
50  %LET l_macname=&sysmacroname;
51  %LET l_log = &i_log;
52  %LET l_html = &o_html;
53 
54  %LET &r_rc=3;
55 
56  /*erster Log-Durchlauf zur Bestimmung von Fehler- und Warnungsanzahl*/
57  %_checkLog(
58  i_logfile = &l_log
59  ,i_error = &g_error.
60  ,i_warning = &g_warning.
61  ,r_errors = l_error_count
62  ,r_warnings = l_warning_count
63  );
64 
65  %IF %_handleError(&l_macname
66  ,LogNotFound
67  ,&syserr. NE 0
68  ,Fehler beim Zugriff auf den Log
69  ,i_verbose=&g_verbose.
70  )
71  %THEN %GOTO errexit;
72 
73  /* TODO consolidate all logscan logic into datastep functions and use them throughout the project.
74  The SAS option CMPLIB must then be set for all sessions to use these functions.
75  */
76  %LET l_sIgnoreLogMessage01 = %STR(ERROR: Errors printed on page);
77 
78  DATA _NULL_;
79 
80  INFILE "&l_log" END=eof TRUNCOVER;
81  FILE "&l_html";
82  INPUT logline $char255.;
83 
84  ATTRIB
85  _errorPatternId LENGTH = 8
86  _ignoreErrPatternId LENGTH = 8
87  _warningPatternId LENGTH = 8
88  error_count LENGTH = 8
89  warning_count LENGTH = 8
90  ;
91  RETAIN
92  _errorPatternId 0
93  _ignoreErrPatternId 0
94  _warningPatternId 0
95  error_count 0
96  warning_count 0
97  ;
98 
99  IF _n_=1 THEN DO;
100 
101  _errorPatternId = prxparse("/^%UPCASE(&g_error.)[: ]/");
102  _warningPatternId = prxparse("/^%UPCASE(&g_warning.)[: ]/");
103  _ignoreErrPatternId = prxparse("/^&l_sIgnoreLogMessage01./");
104 
105  /*HTML-Header*/
106  PUT '<html>';
107  PUT '<head>';
108  PUT '<meta http-equiv="Content-Language" content="de">';
109  PUT '<meta name="GENERATOR" content="SAS &sysver">';
110  PUT '<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">';
111  PUT "<title>&i_title</title>";
112  PUT '</head>';
113  /*HTML-Body*/
114  PUT '<body>';
115  /*Ausgabe einer Seiten-Kopfzeile mit verlinkter Übersicht zu Fehler- und Warnmeldungen*/
116  PUT '<p style="background-color:#EAEAEA; font-family:Fixedsys,Courier,monospace">';
117  PUT "&g_nls_reportLog_001: &l_error_count. ";
118  %DO l_curError = 1 %TO &l_error_count.;
119  IF &l_curError=1 THEN PUT '==>';
120  PUT '<a href="#error' "%sysfunc(putn(&l_curError,z3.))" '">' "&l_curError." '</a>';
121  %END;
122  PUT '<br>';
123  PUT "&g_nls_reportLog_002: &l_warning_count. ";
124  %DO l_curWarning = 1 %TO &l_warning_count.;
125  IF &l_curWarning=1 THEN PUT '==>';
126  PUT '<a href="#warning' "%sysfunc(putn(&l_curWarning,z3.))" '">' "&l_curWarning." '</a>';
127  %END;
128  PUT '<br>';
129  PUT '</p>';
130  PUT '<pre>';
131  END;
132 
133  /*Ausgabe der Log-Zeilen. Fehler- und Warnmeldungen werden farbig markiert und verlinkt*/
134  IF prxmatch (_errorPatternId, logline)
135  AND (NOT prxmatch (_ignoreErrPatternId, logline)) THEN DO;
136  error_count+1;
137  PUT '<span style="color:#FF0000">' @;
138  PUT '<a name="error' error_count z3. '">' @;
139  l = length(logline);
140  PUT logline $varying255. l @;
141  PUT '</a>'@;
142  PUT '</span>';
143  END;
144  ELSE IF prxmatch (_warningPatternId, logline) THEN DO;
145  warning_count+1;
146  PUT '<span style="color:#FF8040">' @;
147  PUT '<a name="warning' warning_count z3. '">' @;
148  l = length(logline);
149  PUT logline $varying255. l @;
150  PUT '</a>' @;
151  PUT '</span>';
152  END;
153  ELSE DO;
154  /*Ersetzung der Zeichen <, > mit entsprechenden HTML-Codes*/
155  DO WHILE (index(logline, '<') > 0);
156  textpos = index(logline, '<');
157  IF textpos NE 1 THEN
158  newlogline = substr(logline, 1, (textpos - 1)) ||'&lt;'||substr(logline, (textpos +length('<')));
159  ELSE
160  newlogline = '&lt;'||substr(logline, (textpos + length('<')));
161  logline = newlogline;
162  END;
163 
164  DO WHILE (index(logline, '>') > 0);
165  textpos = index(logline, '>');
166  IF textpos NE 1 THEN
167  newlogline = substr(logline, 1, (textpos - 1)) ||'&gt;'||substr(logline, (textpos +length('>')));
168  ELSE
169  newlogline = '&gt;'||substr(logline, (textpos + length('>')));
170  logline = newlogline;
171  END;
172  /*Ausgabe in HTML-Datei*/
173  l = length(logline);
174  PUT logline $varying255. l;
175  END;
176 
177  IF eof THEN DO;
178  PUT '</pre>';
179  PUT '</body>';
180  PUT '</html>';
181  END;
182  RUN;
183 
184  %IF %_handleError(&l_macname
185  ,ErrorWriteHTML
186  ,&syserr. NE 0
187  ,Fehler beim Schreiben der HTML-Datei
188  ,i_verbose=&g_verbose.
189  )
190  %THEN %GOTO errexit;
191 
192  %IF &l_error_count > 0 %THEN %LET &r_rc = 2;
193  %ELSE %IF &l_warning_count > 0 %THEN %LET &r_rc = 1;
194  %ELSE %LET &r_rc=0;
195 
196  %GOTO exit;
197 %errexit:
198 %exit:
199 %MEND _reportLogHTML;
200