[ Skill ] 文件读写 & IO 句柄
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 句柄的更多相关文章
- Windows Phone 八、文件读写IO
文件存储的类型 •本地应用文件: •ApplicationData.Current.LocalFolder: •漫游应用文件: •ApplicationData.Current.RoamingFold ...
- 文件读写IO
摘要:本文主要总结了以下有关文件读写的IO,系统调用与库函数. 1.初级IO函数:close,creat,lseek,open,write 文件描述符是一个整型数 1.1close 1.2int cr ...
- 【java学习笔记】文件读写(IO流)
1.字节流 FileInputStream.FileOutputStream ①FileInputStream import java.io.FileInputStream; public class ...
- 快速入门Python中文件读写IO是如何来操作外部数据的?
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- 文件读写io操作范例
系统io读写,copy int main(int argc, char **argv) { if(argc != 3) { printf("Usage: %s <src> ...
- 【Python】[IO编程]文件读写,StringIO和BytesIO,操作文件和目录,序列化
IO在计算机中指Input/Output,也就是输入和输出. 1.文件读写,1,读文件[使用Python内置函数,open,传入文件名标示符] >>> f = open('/User ...
- JAVA之IO文件读写
IO概述: IO(Input output)流 作用:IO流用来处理设备之间的数据传输 ...
- Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化
IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...
- IO编程(1)-文件读写
文件读写 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接 ...
随机推荐
- Lesson4——Pandas DataFrame结构
pandas目录 思维导图 1 简介 DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结构之一. 2 认识DataFrame结构 Data ...
- Lesson3——NumPy 数据类型
NumPy 教程目录 NumPy 数据类型 numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型. 下表 ...
- Tomcat临时目录及java.io.tmpdir对应的目录
最近客户现场的技术支持接连反馈了一个问题:导入数据的时候,上传的excel会在服务器上生成一个临时文件,而这个临时文件都在 tomcat 的安装目录下,如果上传次数比较多的话,就会导致tomcat安 ...
- JQuery扩展方法实现Form表单与Json互相转换
1.把表单转换出json对象 //把表单转换出json对象 $.fn.toJson = function () { var self = this, json = {}, push_counters ...
- iOS WKWebView 使用笔记
首先添加Webkit框架
- 基于人工智能标记语言 (AIML)和任务型对话系统(Task)的深度智能对话机器人demo
起因 本demo基于基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型而来 无意间发现一个基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型,但 ...
- 通过安装HomeBrew来安装Python3
首先说什么是HomeBrew? 下面引用简书上一个博客的解释:(博客链接:http://www.jianshu.com/p/d229ac7fe77d) 为什么要使用Homebrew Mac OS X是 ...
- 使用grpcui测试gRPC服务
grpcui类似Swagger UI,可以用来测试gRPC服务,使用起来特别简单. 其原理是通过自动发现gRPC服务协议(当然前提是gRPC服务暴露了Protobuf协议),然后启动一个带界面的Web ...
- Solution -「NOI 2020」「洛谷 P6776」超现实树
\(\mathcal{Description}\) Link. 对于非空二叉树 \(T\),定义 \(\operatorname{grow}(T)\) 为所有能通过若干次"替换 \( ...
- java中的代码块(初始化块)
介绍 代码块又叫初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{ } 包围起来,但和方法不同,没有方法名,没有返回值,没有参数,只有方法体,而且不通过对象或类显示调用,而是加载类 ...