专栏首页奔跑的键盘侠按键精灵——文本读写操作

按键精灵——文本读写操作

这是奔跑的键盘侠的第128篇文章

之前有提到计划写一个文本读写的专题,但提笔的时候发现独立一篇出来不太合适,但是不独立出来篇幅又有点过长。最后写完才发现:原来隐含的知识点挺多的,自己都有点惊到了。而独立使用的场景想一时没想到,暂且作为一个命令讲解的专题吧。

在实战过程中,文本读写往往都是与其他功能模块结合使用,比如前一篇讲的日志,还有后面会讲的数组,应用极其广泛。

文本读写相关的内容在之前的帖子中有穿插讲到过一些,比如《按键精灵二三事系列第八篇——读取指定行文本内容》介绍读取txt文本内容的,再比如上篇的《按键精灵——脚本日志》就涉及了文本如何写入本地等等。

今天呢,要进行一次系统的讲解。

1

txt文本写入操作

按键精灵对文件的读写有一个专门设置了一个File 文件插件,先来简单看一眼:

命令还是十分烟花缭乱的,这里就挑一个WriteLine写文本内容来介绍吧,软件自带的注释,是让我们参考SeekFile,点到SeekFile的注释(有删减):

fileLen=Plugin.File.GetFileLength("c:\Config.txt")

handle=Plugin.File.OpenFile("c:\Config.txt")

Call Plugin.File.SeekFile(handle,fileLen)

Call Plugin.File.WriteFile(handle,"123456")

Call Plugin.File.WriteLine(handle,"abcdef")

Call Plugin.File.CloseFile(handle)

新手看起来会有点吃力,我稍微解释一下:

这6条命令都是调用按键自身的插件命令,大家知道是什么意思、怎么使用即可。看到 Plugin.开头的其实一点都不用慌,都是些现成的功能,可以直接搬用。

第一句,GetFileLength就是获取文本长度,往深一点讲,涉及到了指针,也就是往txt里写新内容,要把插入点放到末尾。比如日志文件写了100行(长度2000),下一次再写新的内容,需要把插入点放到2000后面,从2001的位置继续写;如果不设置插入点(也就是指针),默认会从开头(长度0)开始写,这样的话原有的内容就会被一个一个的覆盖。

第二句,是打开文件,然后获取此文件的句柄。句柄是windows一个非常重要的概念,有点比较难懂,就不深入了,大家只需要记住:它是程序的一个标识,有了标识,后面直接根据标识就可以对此文件进行操作。

第三句,就是指针移动到文件长度的位置。

第四句、第五句,WriteFile接着写入内容“123456”,不换行哦;而WriteLine是换一行,再写“abcdef”。

第六句,关闭这个文件,写文本完成。这句不可省略,如果省略了,那这个文件一直处在后台打开的状态中。如果重复操作n次的话,这个文件就会后台存在n个状态,会发生什么诡异的事情就不清楚了

2

txt文本读取操作

至于读取的命令,其实大同小异。贴一个ReadLine的命令简单讲一下:

fileHandle=Plugin.File.OpenFile("c:\Config.txt")

file20byte=Plugin.File.ReadFile(fileHandle,20)

fileline=Plugin.File.ReadLine(fileHandle)

Call Plugin.File.CloseFile(fileHandle)

第一句,获取文件句柄;

第二句,读取20个字节长度的内容(从头开始);

第三句读取一行内容;

第四句,关闭文件。

跟写入基本没差,唯一需要补充的是:这里面没有SeekFile的命令,但是依旧有暗藏指针的操作,体现在第二行先读20个字节,紧接着第三行的再读取一行内容,第三行这个读取行内容的代码,其实是从第21个字节起算的(第二行的读取内容,指针会随着读取命令同时移动的)。

如果上面的代码,省略了第二行,那第三行就纯粹的只是读取首行内容了。

感兴趣的小伙伴,可以动手试一下了

最后的最后,文件File插件模块,命令很多,但是只有读写命令的注释示例内容比较多。而创建文件、删除文件、移动文件、重命名、判断文件是否存在的命令,都是一行就可以实现的语法,注释看一眼,基本就能上手。过于直白的语法,这里就不赘述了,大家如果有什么疑问,欢迎留言提问

本文分享自微信公众号 - 奔跑的键盘侠(runningkeyboardhero),作者:我是奔跑的键盘侠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言——小学一年级题目解析(二)

    显然,2>1,if不成立, 只执行b=3。输出结果a为首次赋值的2,b为第二次赋值3。

    Ed_Frey
  • C语言——小学一年级题目解析(五)

    字符型变量也可以直接取对应的字母或数字或其他符号,必须单引号。双引号就不是字符了而是字符串。

    Ed_Frey
  • C语言——小学题目B卷解析(终)

    第6题,简单说明:系统有默认的转化规则,就是从精度底的转化为精度高的,避免计算时精度的丢失。coding一下:

    Ed_Frey
  • 使用MyBatis 框架犯的错误

    values后面的值是相应类对应的属性值,还可以对这些属性指定jdbcType :

    chaplinthink
  • Mybatis源码分析之Mapper注册与绑定

    Mybatis 是一个「面向 sql」的持久层框架,它可实现动态拼装 sql,极其灵活,同时避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,其插件...

    张乘辉
  • Mapped Statements collection does not contain

    Mapped Statements collection does not contain value for后面是什么类什么方法之类的 错误原因

    zhangheng
  • 搭建容器监控

    访问Grafana,通过ip+3000端口的方式访问,默认账户密码(admin/admin)。

    分母为零
  • Java基础系列(四十四):集合之ArrayList

    ArrayList与Vector非常相似,他们都是基于数组实现的集合,都可以动态扩容,只不过Vector是同步的,所需的资源较多,而且比较老,有一些缺点,所以我...

    山禾说
  • codevs 4888 零件分组

    4888 零件分组  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description...

    attack
  • Python 命令行之旅:深入argparse (一)

    在第一篇“初探 argparse”的文章中,我们初步掌握了使用 argparse 的四部曲,对它有了一个基本的体感。但是它具体支持哪些类型的参数?这些参数该如何...

    Python猫

扫码关注云+社区

领取腾讯云代金券