https://www.cnblogs.com/yeungchie/

在 Skill 中使用一种叫做 ioport 类型的变量来操作文件。不过我一般更习惯称为 IO 句柄 (IO/File Handle)

常用下面两个函数来获得这些 IO 句柄:

  • infile

    获得输入句柄, 文件。
  • outfile

    获得输出句柄, 文件。

输入

输入句柄 infile

假设现有一个文件 file.txt

$ cat -n file.txt
1 2022-02-20
2 20:39:29
3 Sunday

获取一个输入句柄,打开这个文件。

inHandle = infile( "file.txt" )

行读取 gets

gets 可以将按 迭代文件内容(一行一行读取),全部内容读取完会返回 nil

gets( string inHandle )

上面这个操作将第一行的内容赋值给了 string 变量。

printf( "%s\n" string )
; 2022-02-20

也可以将第一个参数指定为 nil,不赋值给变量,通过函数返回值的读取内容,类似 sprintf 函数

再次使用 gets 则会继续读取第二行内容。

printf( "%s\n" gets( nil inHandle ))
; 20:39:29

字读取 getc

getc 可以将按 单个字符 迭代文件内容(一个字一个字读取),全部内容读取完会返回 nil

gets 有点不同,getc 返回 symbol 类型,且第一个变量为句柄。

printf( "%s\n" getc( inHandle ))
; S

读取完剩下内容,并打印出来。

while( char = getc( inHandle )
printf( "%s\n" char )
)
; u
; n
; d
; a
; y

读取结束后记得关闭这个句柄。

close( inHandle )

输出

输出句柄 outfile

获取一个输出句柄,打开一个文件,打开方式如果没有指定则默认为 w,这会覆盖原有内容。

outHandle = outfile( "file.txt" )

打印输出 fprintf

fprintf 将字符串输出到 IO 句柄,下面写点东西进去。

fprintf( outHandle "%s\n" "2022-02-20")
close( outHandle )
$ cat -n file.txt
1 2022-02-20

打开方式 mode

上面提到 outfile 的默认打开方式 w 会覆盖源文件内容,当我们需要在源文件基础上追加内容时,可以在第二个参数指定 a ,代表 append 方式。

outHandle = outfile( "file.txt" "a" )
fprintf( outHandle "%s\n" "21:06:13")
close( outHandle )
$ cat -n file.txt
1 2022-02-20
2 21:06:13

关闭

关闭句柄 close

上面的例子中已经出现过了,功能很简单,IO 句柄用完后关掉它,解除与文件的关联,释放资源(文件句柄资源是有限的)。

close( inHandle )
close( outHandle )

预设句柄

预设的几个句柄变量。

标准输入

  • piport

标准输入句柄,类似于 C 中的 stdin。

可以配合函数 get_filename 来获取当前文件的文件名(路径):

$ cat -n piport.il
1 printf( "The value is %s\n" get_filename( piport ))
load( "piport.il" )
The value is piport.il
  • stdin

这个变量在 help 文档中描述是和 piport 类似的,但两者又不相等。

stdin == piport
; nil

也无法配合 get_filename 函数:

$ cat -n stdin.il
1 printf( "The value is %s\n" get_filename( stdin ))
load( "stdin.il" )
The value is *stdin*

也不像 Perl 中的 <STDIN> 能获取终端上的用户输入,我暂时没找到应用场景。

标准输出

  • poport

标准输出句柄,类似于 C 中的 stdout。

在使用一些 常用的 print 函数 向 CIW 打印数据时,其实省略了指向标准输出这一步,例如 printf

printf( "%s\n" getCurrentTime())
; Feb 21 21:19:42 2022

也可以写成 fprintf

fprintf( poport "%s\n" getCurrentTime())
; Feb 21 21:20:47 2022

效果是一样的。

  • ptport

跟 poport 一样的。

ptport == poport
; t
  • stdout

跟 poport 一样的。

stdout == poport
; t

错误输出

  • errport

错误输出句柄,类似于 C 中的 stderr,用于打印错误信息,在 CIW 上会显示红色的字体。

fprintf( poport "Unremarkable infomation ~\n" )

Unremarkable infomation ~

fprintf( errport "Error infomation !\n" )

Error infomation !

  • stderr

跟 errport 一样的。

stderr == errport
; t

警告输出

  • woport

警告输出句柄,也类似于 C 中的 stdout,用于打印警告信息,在 CIW 上会显示黄色的字体。

fprintf( woport "Warning infomation !\n" )

Warning infomation !

刷新缓冲区

刷新输出缓冲区

drain( poport )

不过我一般用这个

hiFlushCIW()

最新文章

  1. JavaScript DOM编程艺术读书笔记(三)
  2. arcgis python 更新顺序号
  3. [Ubuntu] Ubuntu14.04 64bit 编译安装nginx1.7+php5.4+mysql5.6
  4. android 系统应用在运行时被卸载
  5. bzoj 1014 [JSOI2008]火星人prefix(splay+hash)
  6. Python中使用中文
  7. MQTT 设计原则
  8. python的map
  9. 关于map的初级应用
  10. Laravel -- 邮箱功能配置问题
  11. Content Security Policy介绍
  12. asp grid 增加和删除行数据
  13. Html-文档类型(DTD)和DOCTYPE
  14. HttpClient上传下载文件
  15. mybatis模糊查询防止SQL注入
  16. python练习笔记——完全数(1000以内的)
  17. Linux Expect 简介和使用实例
  18. 关于css文字的扩展
  19. Mac系统在finder拦显示当前所浏览的文件路径的方法
  20. Linux下的echo输出换行符

热门文章

  1. c#序列化和反序列化《转载》
  2. CKKS加密方案
  3. 理解https中的安全及其实现原理
  4. 「JSOI2018」机器人
  5. linux下使用openssl生成 csr crt CA证书
  6. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
  7. uniap tab list 滑动
  8. 基于人工智能标记语言 (AIML)和任务型对话系统(Task)的深度智能对话机器人demo
  9. Ubuntu18 用新用户登录后退格键/方向键/制表键 乱码
  10. 第2章 selenium开发环境的搭建