BT-Basic编程系列--12--输入输出之文件操作

BT-Basic编程系列–12–输入输出之文件操作

文章目录

  • BT-Basic编程系列--12--输入输出之文件操作
    • 文件标识符和`@`文件标识符
    • 文件操作
      • 文件结构
      • 抑制终止序列
      • 1.写文件
      • 2.读文件
      • 3.读写设备


文件标识符和@文件标识符

由于BT-Basic源生于Unix操作系统,在这个操作系统中设备是文件系统的一部分,所以文件和设备都通过文件标识符进行寻址。

当一个I/O语句通过来访问文件(设备)时,该文件会在访问开始时打开,但一旦访问完成就会关闭。每次访问文件时,都会从文件的开头开始。只要你不需要连续的串行访问,这种寻址方法是可以接受的。

此外,我们可能希望在程序执行期间对文件(设备)拥有独占控制,以防止系统中的其他进程干扰我们的程序。这可以通过为文件分配一个@来实现,然后通过@文件标识符而不是通过其正常标识符来访问文件。

当一个文件或设备被分配一个@(通过assign to语句进行赋值),该文件将被打开进行访问,直到@被取消之前都保持打开状态。对该文件或设备的连续访问将是串行的,下一次访问从上一次访问停止的地方开始。你在打开文件时,需要指定你是想读取或写入它,并且是否希望独占使用——即在你关闭它之前,其他任何进程或用户都不能访问它或者共享使用。

如果你要写入它,还需要指定你是想创建一个新文件,还是写覆盖或附加到现有文件上。


文件操作

文件结构

一个文件或设备由包含该文件中数据的一条或多条记录组成。记录的长度取决于其中的数据量。一条记录可以包含0到2044个字符(包含空格)。一条存在但没有内容的记录被称为空记录。如果尝试在一条记录中存储超过2044个字符,则会发生错误。如果你尝试输入一条超过2044个字符的记录,额外输入的字符将被截断且不处理。

通过outputprint语句将数据写入文件或设备。在写入过程中,当发送EOL(行结束)序列时,当前记录结束。这会在记录中生成一个EOR(记录结束)标记。假设有更多数据,则会开始一个新记录。

如果输出操作使用段落格式化,则最大可以的记录长度为80个字符,在写入文件的时候要注意这个问题,超过长度那部分数据会被丢弃。

实际上最大记录长度取决于将输出数据发送到的设备的最大行长度。如果要发送的记录长于设备所能接受的长度,则该记录会自动分成两个或更多合适长度的记录,以确保数据无损发送。如果使用自定义格式,则最多可以传输2044个字符的记录。

抑制终止序列

不同的设备需要不同的终止序列来正确终止写入它们的数据。系统知道所有标准设备和所有可以连接的标准选项所需的序列。然而,由于系统可能同时拥有GPIBRS-232接口,可能无法识别机器上的设备是通过哪种接口进行通信。为此,image语句提供了一个抑制EOL()规范,你可以使用它来防止系统向GPIBRS-232设备发送其EOL信息。这样就可以发送正确的字符序列,以终止发送到该设备的数据。抑制EOL规范只能用于GPIBRS-232设备。

有一点要注意的是:
测试系统在I/O操作过程中不对数据执行任何奇偶校验

1.写文件

  • over覆盖,从文件头开始写,意味着现有文件中的数据将被丢失;
  • append保留现有数据并在文件尾部添加新数据;
  • new新建,如果已经存在则会报错;
  • shared共享访问允许一个人写入,而其他人读取或写入文件,一般不推荐使用,容易破坏数据完整性;
  • exclusive独占式访问,不允许其它用户进行访问。
assign @Notes to "D:/notes";write,over,exclusive    !打开文件
output @Notes: A,B,C                                !输出变量中的数据到文件中
output @Notes: Q,R,X
assign @Notes to *                                  ! 关闭文件

2.读文件

assign @CONTENT , Err to "readme.txt" ; read        !打开文件
if Err= 0 then                                      !判断是否正常打开文件
   loop
      Line$=""
      enter @CONTENT ,,Err ; Line$                  !每次只读文件中的一行
      exit if Err=101007                            !读到结尾时会产生一个错误代码,出现这个代码则退出循环
      print Line$
   end loop
   assign @CONTENT  to *                            !关闭文件
else
   print "Can't read the file"
end if

3.读写设备

assign @DVM to "/dev/dvm1";read, write, exclusive    !分配@DVM到"/dev/dvm1";读取,写入,独占
output @DVM;"D0 Z0 FL0 T4 F3 1STI 1STN .1STD M0 R5"  !向设备输出指令
trigger @DVM                                         !等待设备触发
enter @DVM; Dvm_reading                              !读取设备返回值到变量中
assign @DVM to *                                     !释放设备

如果一个磁盘文件(不是设备)被打开用于读写,第一次访问该文件的I/O语句将决定操作类型是读取还是写入。后续的访问必须是相同的类型,直到@文件标识符被取消并且文件可以重新打开。

将文件打开进行多次访问比每次访问都打开然后关闭要快。只要文件是打开的,系统就知道文件的位置,可以直接访问它,而不用在磁盘上搜索。作为经验法则,当从程序中访问文件和设备时,应该使用@文件标识符。使用文件标识符虽然在从键盘进行交互操作时很有用,但在程序中用途有限。


你可能感兴趣的:(BT-Basic语法,开发语言)