打开一个流中的持久性过程函数(Opening a STREAM in a Persistent Pr

2019-10-28 12:45发布

我有一个持续的过程,在我试图打开,写入和关闭流。

我在程序的主要区域

DEFINE STREAM sOutFile.
OPEN STREAM sOutFile TO VALUE( outFileName ).
MESSAGE SEEK( sOutFile ).

随后持续过程中的功能

FUNCTION example RETURN LOGICAL:
  MESSAGE SEEK( sOutFile ).
  PUT STREAM sOutFile UNFORMATTED someData.
END.

当在持续过程被实例化时,消息会显示“0”,所以该流已被打开。 然而,当例如被调用时,消息会显示“?” 我得到一个消息有关试图写入一个封闭的流。

我试过,宣布流新的共享,但没有任何区别。

我是不是做错了什么,或者是不可能持久的程序中定义流?

Answer 1:

这是早期,我的咖啡已经没有尚未踢,但我认为你必须打开PP身体的外侧流。

这工作:

/* ppstream.p
 *
 */

define stream logStream.

session:add-super-procedure( this-procedure ).

/* end of PP init */

function initLog returns logical ( input lgFile as character ):
  output stream logStream to value( lgFile ) unbuffered.
  return true.
end.

function logStuff returns logical ( input msg as character ):
  put stream logStream unformatted msg skip.
  return true.
end.

然后调用它像这样:

function initLog  returns logical ( input lgFile as character ) in super.
function logStuff returns logical ( input msg as character ) in super.

run ./ppstream.p persistent.

initLog( "log.txt" ).
logStuff( "test" ).

(我使用的会话超程序,以避免定义手柄 - 你不一定需要做到这一点。)



文章来源: Opening a STREAM in a Persistent Procedure Function