二进制存档的方式是一种速度较快且较节省空间的储存方法,常应用于高速资料撷取及实时存档的程序,但使用的方法却和低阶的 ASCII原理不相同,你必需要先了解各种不同类型的资料长度,象是DBL是64bit的资料长度、I32是32bit的资料长度等,如果你了解了这些的讯息,对于资料读取的部分你就很容易了解,那我们先来看看一般常用的二进制存档元件有那些。
档案开启元件 Open/Create/Replace File是用来开启档案的元件,该元件提供了建立、覆盖、开启等不同的操作方式让你自由选择。
二进制写入元件 二进制资料的写入元件,你只要将欲存档的资料输入到[data]脚位,程序于存档时直接依资料的型态转换成二进制码储存,象是DBL的资料就会用64bits的空间来储存每个数值。
二进制读取元件 二进制资料读取元件,跟ASCII最大的不同是你必需要知道档案的资料格式,才能够正确的将档案资料读出,[data type]是让你设定档案格式的接脚,[count]接脚是让你设定读取的资料数目。
档案关闭元件 任何的资源使用,都必需要有正确资源释放动作,才不会造成资源的占用,所以操作完档案后,请记得将档案做关闭的动作。
读取档案大小 因为二进制读档时需要手动设定读取的资料次数,所以你必需要先获得档案资料的大小,再去换算要读取的次数,举例来说,若你的档案是大小为640bytes且型态为DBL的资料,那么Get File Size.vi就会回传640,但是每个DBL会占用8bytes,所以你再将640/8=80输入到Read from Binary File.vi的[count]接脚,就可以将所有的资料读回。
二进制档写入教学 二进制档写入的方式和ASCII的方式类似,你需要先开启档案,再写入资料,最后关闭档案,就如同下图所示。
上面的程序是一个最基本的二进制资料存档程序,你只需要将任何想储存的资料,连线到二进制写入元件即可,但不知道你有没有发现,二进制写入元件有一只接脚,叫做Prepend array or string size?,这只接脚会影响阵列或是字符串储存的结果,预设是True,也就是当你输入的是阵列资料,每个维度程序会自动在存档的最前面使用一个32bits来表示阵列的长度,如果是二维的阵列,程序就会自动使用二个32bits来说明长度,如果你将Prepend array or string size?设成False,程序则不会自动在最前面加上阵列长度栏位,所以上面的程序所存的档会像下表的呈现方式。
那如果你将程序改成下列的方式呈现,则存档时会在档案的最前面加上一个32bits的栏位来表示阵列长度。
进制档读取教学 二进制档的读取,在读取的时候,你应该会直觉得知道要使用二进制读档元件,但二进制的读档元件比较麻烦一些,有一些参数是需要被正确设定后,资料才能顺利载入,如下图所示,你需要在data type接脚指定二进制档的资料型态,指定的方法,就是接一个相同的资料常数给这只脚,另外就是count(1)接脚,你需要告诉程序要读几个值回来,如果你想要将所有的资料读回,那你就必需要知道实际的数值个数。
或许你已经被上面的文字说明弄糊涂了,我用先前的写档程序来向大家说明,下图的上半部为二进制存档程序,下半部为二进制读档程序,资料是一组一维阵列,长度为5个元素,且我存档程将Prepend array or string size?设成False,所以存档时,程序不会在档案前面加上阵列长度,而在读二进制档时,要记得使用Get File Size.vi来获得档案的大小,他所传回的单位是Byte,接着再依照档案资料型态来换算档案中实际的数值个数,以这个程序为例,因为存的是DBL型态,每个数值长度为8bytes,所以Get File Size会回传40,然后你再将40除以8,即可得知档案中有5个DBL。 |