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. SpringBoot Log4j 安全漏洞分析及解决方案

    一.序言 SpringBoot作为Java基础框架大行其道,前不久爆发出Log4j安全漏洞,大众更多关心Log4j的危害是多么严重,然而鲜有关心SpringBoot这一底层框架的安全性问题,换而言之, ...

  2. Github上点赞90k的计算机基础、操作系统、网络笔记,赶紧收藏

    最近,有粉丝发消息给我,说想要好好学习计算机,但是找不到门路啊,所以小编打算给大家推荐一些很奈斯的计算机学习的资料,希望大家赶紧收藏起来好好学习. 资料分为四份,给大家展示了部分内容,头条受限,无法全 ...

  3. idea2020.1版本的maven项目报包不存在,找不到包错误

    错误描述 idea创建maven项目,导入依赖都是成功,但是运行就会报找不到对应jar包的错误 解决办法: File -> Settings -> 搜索maven -> 展开mave ...

  4. git rm 与 git rm --cached 的区别

    感谢原文作者:book_02 原文链接:https://www.jianshu.com/p/1c442fd398b7 git rm : 同时从工作区和索引中删除文件.即本地的文件也被删除了. git ...

  5. springBoot2.*使用redis集群/单机方法

    在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce. 此处springboot2.x,所以使用的是Lettuce.关于jedis跟 ...

  6. Ansible playbook实现apache批量部署,并对不同主机提供以各自IP地址为内容的index.html

    1.基于key验证免密授权 1.1 生成kekgen # ssh-keygen Generating public/private rsa key pair. Enter file in which ...

  7. 动静分离+url地址重定向+HTTPS协议

    动静分离+url地址重定向+HTTPS协议

  8. Solution -「ARC 126E」Infinite Operations

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...

  9. Solution -「LOCAL」二进制的世界

    \(\mathcal{Description}\)   OurOJ.   给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...

  10. Spring Boot AOP 扫盲,实现接口访问的统一日志记录

    AOP 是 Spring 体系中非常重要的两个概念之一(另外一个是 IoC),今天这篇文章就来带大家通过实战的方式,在编程猫 SpringBoot 项目中使用 AOP 技术为 controller 层 ...