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. 集合remove()方法相关问题

    学习集合的过程中,了解到一个有关于remove()方法的有关特性,特此记录 首先remove方法的格式: collection.remove(Object o); 这是指对集合collection内的 ...

  2. JVM学习十五 - (复习)类加载的时机、类加载过程、类加载器

    一.类加载的时机 类的生命周期 类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段: 加载 验证 准备 解析 初始化 使用 卸载 验证.准备.解析 3 个阶段统称为连接 ...

  3. 1、interface/implements 接口与引用

    转载请注明来源:https://www.cnblogs.com/hookjc/ 1.类中全部为抽象方法 2.抽象方法前不用加abstract 3.接口抽象方法属性为public 4.成员属性必须为常量 ...

  4. ARP数据包分析

    转载请注明来源:https://www.cnblogs.com/hookjc/ 本机IP:192.168.0.1 (c0 a8 00 01)本机MAC:00-50-56-c0-00-01目标IP:19 ...

  5. PHP操作Mysql疑问?

    1.Mysql控制台乱码 set character_set_results = 'utf8';

  6. JAVA面向对象特征详解

    1. 封装 封装性的产生目的:保护某些属性和方法不被外部所看见. 封装的实现:为属性和方法进行封装是通过关键字private声明的:实现该属性的set和get方法,为外部所访问 该公开的公开,该私有的 ...

  7. iOS应用性能调优的建议和技巧--中高级--王朋

    中级(这些是你可能在一些相对复杂情况下可能用到的) 9. 重用和延迟加载Views 10. Cache, Cache, 还是Cache! 11. 权衡渲染方法 12. 处理内存警告 13. 重用大开销 ...

  8. 02 前端基础之CSS

    目录 前端基础之CSS css简介 基本选择器(重要) 组合选择器(重点) 属性选择器 分组与嵌套 伪类选择器 伪元素选择器 选择器的优先级 字体相关 背景属性 边框属性 display属性 盒子模型 ...

  9. 自学linux(安装系统,图形化界面,安装chrome)STEP1

    1. 下载虚拟机VMware并安装 破解版: https://www.xitmi.com/2417.html 2. 下载centos7,6据说已经找不到了? 阿里云镜像: https://mirror ...

  10. RFC3918聚合组播吞吐量测试——网络测试仪实操

    一.简介 1.RFC3918简介 历史 · 在1999年3月成为正式标准 功能 · 评测网络互连设备或网络系统的性能 · 网络设备: 交换机,路由器- 内容 · 定义了一整套测试方法,为不同厂家的设备 ...