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()

[ Skill ] 文件读写 & IO 句柄的更多相关文章

  1. Windows Phone 八、文件读写IO

    文件存储的类型 •本地应用文件: •ApplicationData.Current.LocalFolder: •漫游应用文件: •ApplicationData.Current.RoamingFold ...

  2. 文件读写IO

    摘要:本文主要总结了以下有关文件读写的IO,系统调用与库函数. 1.初级IO函数:close,creat,lseek,open,write 文件描述符是一个整型数 1.1close 1.2int cr ...

  3. 【java学习笔记】文件读写(IO流)

    1.字节流 FileInputStream.FileOutputStream ①FileInputStream import java.io.FileInputStream; public class ...

  4. 快速入门Python中文件读写IO是如何来操作外部数据的?

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  5. 文件读写io操作范例

    系统io读写,copy int main(int argc, char **argv) {  if(argc != 3) {   printf("Usage: %s <src> ...

  6. 【Python】[IO编程]文件读写,StringIO和BytesIO,操作文件和目录,序列化

    IO在计算机中指Input/Output,也就是输入和输出. 1.文件读写,1,读文件[使用Python内置函数,open,传入文件名标示符] >>> f = open('/User ...

  7. JAVA之IO文件读写

    IO概述:                                                          IO(Input output)流 作用:IO流用来处理设备之间的数据传输 ...

  8. Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化

    IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...

  9. IO编程(1)-文件读写

    文件读写 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接 ...

随机推荐

  1. background-position:color url(image) -left -up no-repeat;

    转载请注明来源:https://www.cnblogs.com/hookjc/ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  2. Redis的最常被问到知识点总结 (转)

    1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...

  3. cocos命令生成apk

    1. 配置好cocos命令中需要的andrid 环境命令 2. adt或许没有 zipalign.exe, 在生成 release版中需要这个文件来生成apk (路径D:\adt\sdk\tools) ...

  4. Hadoop文件操作常用命令

    1.创建目录 #hdfs dfs -mkidr /test 2.查询目录结构 #hdfs dfs -ls / 子命令 -R递归查看//查看具体的某个目录:例如#hdfs dfs -ls /test 3 ...

  5. 记录netcore一次内存暴涨的坑

    项目用到了Coldairarrow/EFCore.Sharding: Database Sharding For EFCore (github.com)这个组件,最初是因为分表做的还不错所以用了它. ...

  6. 关于git和SVN的介绍和区别

    主要对git,svn进行一个简单的介绍. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜 ...

  7. Solution -「CF 1375G」Tree Modification

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个结点的树,每次操作选择三个结点 \(a,b,c\),满足 \((a,b),(b,c)\in E\),并令 ...

  8. ASP.NET Core 6框架揭秘实例演示[09]:配置绑定

    我们倾向于将IConfiguration对象转换成一个具体的对象,以面向对象的方式来使用配置,我们将这个转换过程称为配置绑定.除了将配置树叶子节点配置节的绑定为某种标量对象外,我们还可以直接将一个配置 ...

  9. RFC2544背靠背测试——信而泰Renix测试软件实操

    文章关键词:背靠背测试.合法最小帧间隙.缓存区结构.吞吐量测试. 背靠背测试背景: 随着网络规模的扩大,大量的路由更新消息.频繁的文件传输和数据备份等操作都会导致数据在一段时间内急剧增加,甚至达到该物 ...

  10. BI工具入门:如何做关系数据源的连接?

    ​以往咱们分享的操作步骤都稍微有些复杂,大家跟着步骤操作也有些二丈摸不着头脑,看来简单的操作步骤和功能概念还是有必要普及的,那今天就来说一点简单的入门操作知识,以Smartbi为例子,跟大家说说BI工 ...