保持TEXT NOSHOW ... ENDTEXT输出SET ALTERNATE文件?

时间:2015-12-08 10:22:18

标签: visual-foxpro foxpro

NOSHOW命令的TEXT子句禁止输出到Fox主窗口,但输出仍显示在SET ALTERNATE的日志文件集中。文本输出可以以某种方式保留在文本文件之外吗?例如:

set alternate to foo.log
set alternate on

* ...

local s
text to s noshow
   this won't show up on the screen but it'll go into the file anyway
endtext

* ...

set alternate off
set alternate to

发布SET CONSOLE OFF无效。

背景:我想捕获输出到Fox屏幕的文本,但产生输出的代码包含一些TEXT NOSHOW ... ENDTEXT块,用于初始化工作对象中的多维查找数组。该文本也会在文件中结束并使其基本无用,噪声信号比率约为1000比1.我不想通过围绕TEXT块来破坏无辜的工作者代码随着SET ALTE摆弄,因此这个问题。

2 个答案:

答案 0 :(得分:0)

您可以使用Set Textmerge而不是text ... endtext。即:

Local s
Set Textmerge To Memvar s Noshow
   \\this won't show up on the screen nor will go into the file
Set Textmerge To
Set Textmerge Off

答案 1 :(得分:0)

目标是双重的。主要目标是将输出捕获到文件中以便于阅读 - 输出是一些剩余的原型/研究代码的结果,可用于进一步的原型设计/研究。例如:

nVorhanden = bitor( ;
      iif(empty(nvl(m.oPos.c_LK, 0)), 0, 1), ;
      iif(empty(nvl(m.oPos.c_EDVNr, 0)), 0, 2)  )
nFehlt = bitand(m.nPflicht, bitnot(m.nVorhanden))
if m.nFehlt <> 0
   anzeige_Dateiname_und_LnwId_falls_noetig_(m.oLnw, @m.lDateinameAngezeigt)
   ? "  Pos[" + transform(m.i) + "]: #" + transform(m.oPos.n_PlanPos), "'"
   ?? m.oPos.c_Text
   ?? "' ("
   ?? transform(m.oPos.c_LK)
   ?? "|"
   ?? transform(m.oPos.c_EDVNr)
   ?? "|Faktorsumme", transform(m.oPos.Faktorsumme())
   ?? "):"
   if bittest(m.nFehlt, 0)
      ?? " LK-Nr. fehlt"
   endif
   if bittest(m.nFehlt, 1)
      ?? " EDV-Nr. fehlt"
   endif
endif

使用不同的输出方法来破解类似的东西的kLOC会比它的价值更多的工作。另一方面,带有TEXT命令的散布输出信噪比为1到1000,使捕获的输出无效。

第二个目标是到munge - 并且可能会破坏 - 内部使用TEXT NOSHO ... ENDT的无辜库代码。因此,用户代码必须让位。为了将中断/噪声降到最低,建立一个简单的SET-ALTE-OFF类,可以在战略位置使用以包装TEXTy库调用,如下所示:

* ...

with createobject([SET_ALTE_OFF_and_restore_later])
   roIntp = CPaulaExcelinterpreter(m.oXLSX.c_Alias)  && <- does TEXT ...
endwith

pruefe_Lnw(m.roIntp.o_Lnw)  && <- does useful output

* ...

实际上它是所有输出有趣信息的周围代码,只有少数几个TEXTy库调用。

在所考虑的所有替代方案中,这为源代码增加了最少量的噪声,并且面对异常飞行时是安全的,不需要明确的FINALLY帧,因此即使在Foxen之前工作也是如此VFP8。

自然,课程简单明了:

define class SET_ALTE_OFF_and_restore_later as relation
   c_ALTE = .null.
   function Init
      this.c_ALTE = set("ALTERNATE")
      set alternate off
   procedure Destroy
      if this.c_ALTE == "ON"
         set alternate on
      endif
enddefine

尽量减少工作量。

TEXT NOSHOW ... ENDTEXTSET ALTERNATE捕获的行为仍然很奇怪,但是......