在 Skill 中使用一种叫做 ioport 类型的变量来操作文件。不过我一般更习惯称为 IO 句柄 (IO/File Handle)。
常用下面两个函数来获得这些 IO 句柄:
- infile
获得输入句柄, 读 文件。 - outfile
获得输出句柄, 写 文件。
假设现有一个文件 file.txt
$ cat -n file.txt
1 2022-02-20
2 20:39:29
3 Sunday
获取一个输入句柄,打开这个文件。
inHandle = infile( "file.txt" )
用 gets
可以将按 行 迭代文件内容(一行一行读取),全部内容读取完会返回 nil
。
gets( string inHandle )
上面这个操作将第一行的内容赋值给了 string
变量。
printf( "%s\n" string )
; 2022-02-20
printf( "%s\n" gets( nil inHandle ))
; 20:39:29
用 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 )
获取一个输出句柄,打开一个文件,打开方式如果没有指定则默认为 w
,这会覆盖原有内容。
outHandle = outfile( "file.txt" )
用 fprintf
将字符串输出到 IO 句柄,下面写点东西进去。
fprintf( outHandle "%s\n" "2022-02-20")
close( outHandle )
$ cat -n file.txt
1 2022-02-20
上面提到 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
上面的例子中已经出现过了,功能很简单,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></stdin>
能获取终端上的用户输入,我暂时没找到应用场景。
- poport
标准输出句柄,类似于 C 中的 stdout。
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 "Normal information ~\n" )
Normal information ~
fprintf( errport "Error information !\n" )
Error information !
- stderr
跟 errport 一样的。
stderr == errport
; t
- woport
警告输出句柄,也类似于 C 中的 stdout,用于打印警告信息,在 CIW 上会显示黄色的字体。
fprintf( woport "Warning information !\n" )
Warning information !
刷新缓冲区
刷新输出缓冲区
drain( poport )
更多时候是想刷新 CIW 中的输出信息,所以我一般用这个
hiFlushCIW()
Original: https://www.cnblogs.com/yeungchie/p/15902303.html
Author: YEUNGCHIE
Title: [ Skill ] 文件读写 & IO 句柄
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583022/
转载文章受原作者版权保护。转载请注明原作者出处!