如何使用StreamWriteAsText()写入Number类型的数据?

时间:2019-05-14 19:06:53

标签: dm-script

我的最终目标是多次写入图像数据文件和花费的时间。这可用于生成时间与强度的关系图。

为此,我试图使用ImageWriteImageDataToStream()函数将一维图像及时地重复写入文件流。为此,我将一个Listener对象附加到正在读取的相机视图上,然后该侦听器执行一个函数,该函数每次数据更改(ImageWriteImageDataToStream()时,使用messagemap = "data_changed:MyFunctiontoExecute"将图像写入文件流。

我的问题是,是否可以将时间戳记写入同一文件流?

我能找到的是StreamWriteAsText(),它采用String数据类型。我可以将数字类型的时间转换为字符串类型吗?

有人有更好的方法吗?

目前我的解决方案是同时创建一个单独的文件,并使用WriteFile()记录时间,因此不使用文件流。

//MyFunctiontoExecute, where Img is the 1D image at the current time
My_file_stream.StreamSetPos(2,0)
ImageWriteImageDataToStream(Img, My_file_stream, 0)

//Write the time to the same file
Number tmp_time = GetHighResTickCount() - start_time
My_file_stream.StreamSetPos(2,0)

My_file_stream.StreamWriteAsText(0,tmp_time) //does not work

//instead using a different file
WriteFile(My_extrafileID,tmp_time+"/n")

1 个答案:

答案 0 :(得分:1)

我认为您的流媒体概念是错误的。当流传输到文件时,在toStream()命令的末尾,流位置已经在末尾。因此,您无需设置位置。

您的脚本实质上是告诉计算机将流 back 设置到该起始位置,然后写入文本-覆盖数据。

在阅读过程中要跳过某些部分时,仅需要使用“ StreamSetPos()”命令(例如,在为特定文件格式定义导入脚本时很有用。或者仅从文件中提取特定子集。 )。

如果您要做的只是“流出一些原始数据” ,则您可以这样做:只需依次调用命令即可:

void WriteDataPlusDateToStream( object fStream, image img, string dateStr )
{
    number endian = 0
    number encoding = 0
    img.ImageWriteImageDataToStream(fStream,endian)
    fStream.StreamWriteAsText(encoding,dateStr) 
}

类似地,您只需按照相同的顺序“流式”

void ReadDataPlusDateFromStream( object fStream, image img, string &dateStr )
{
    number endian = 0
    number encoding = 0
    img.ImageReadImageDataFromStream(fStream,endian)
    fStream.StreamReadTextLine(encoding,dateStr)    
}

这里有两点很重要:

    ImageReadImageDataFromStream中的
  • 是图像img大小和数据类型,它定义了从流中读取多少字节以及如何解释它们。因此,img必须已经预先创建并且大小和文件类型合适。

  • StreamReadTextLine中的
  • 流将继续以文本形式 读取,直到遇到行尾字符({{1} })或流的结尾。因此,在流式传输时,请确保该行结束符。另外,您可以确保字符串始终具有特定大小,然后使用\n并指定适当的长度。

使用上述两种方法,您可以使用以下测试脚本作为起点:

StreamReadAsText

请注意,像这样流式传输“二进制数据”时,定义文件格式的是 you 。您必须确保读写代码匹配。