大家好,我是公众号3分钟学堂的郭立员~
前言
按理说这个问题很好解决,读一行和删一行都有对应的命令,读一行用file.readline,删一行用file.deleteline,那为啥还总有人问这个问题?
我觉得有这么几种可能性:
一、刚刚接触按键精灵的新手
对命令不熟,不知道用什么命令,这种情况我们不在这期文章的讨论范围。
二、系统兼容性问题
举个例子,我用脚本往文本里面写入4行内容,代码如下:
- Dim path="/sdcard/pictures/xx.txt"
- file.Write (path)
- Dim arr={1,2,3,4}
- file.WriteLines(path,arr)
复制代码在不同电脑系统上显示的结果是不一样的,在win10系统中文本是分行的,而在win7系统中,文本是只有1行。效果如图所示:
造成这个原因是因为文本换行机制:
在win7系统中文本换行需要在文字行结尾处加上 \r\n
在win10系统中文本换行只需要在文字行结尾处加上 \n
\r 回车符
\n 换行符
我们用脚本写入文本内容使用的是file.WriteLines 命令,打开file插件,看一下这个命令的源码:
在源码中可以看到把数组写入命令,就是循环写入每一行内容,并且在行结尾出加上\n实现换行。
因为缺少\r导致在win7系统中,看不到换行效果,但是仅仅是在文本中看不到换行效果,并不代表没有。
当使用其他文本工具打开文本时,还是会看到换行效果的。
①用notepad打开
②用模拟器打开
那上面说的这个兼容性对我们“读一行删一行”的操作有什么影响呢?
假设你使用的是win7系统
你先有个xx.txt的文本,文本内容是
然后执行“读一行删一行”的操作
- Dim txt=file.readline("/sdcard/pictures/xx.txt",1)
- TracePrint txt
- file.DeleteLine "/sdcard/pictures/xx.txt", 1
复制代码执行完操作后,文本内容变成这样了,看起来像一行,仅仅是看着像一行
这时有的人就懵逼了,我就删除了第1行,为啥所有行都合并到一起了。
那问题出在哪?
出在file.deleteline命令,也就是删除指定行的内容:
可能你会有个误区,删除文本行就是打开文本以后找到指定行,把整行内容删掉,然后再去掉空行,整个删除操作是在文本内进行的。
其实并不是,删除操作是把所有内容先读取出来,然后删掉不要的内容,在写回文本。
在这个过程中,有一个写入文本的操作,也就是用到上面说的file.WriteLines 命令,所以就存在win7和win10兼容性的问题,导致看不到换行效果。
插件中file.deleteline命令的源码中看到调用writelines函数
那怎么解决这个问题?
①不去管它,因为只有在win7文本有问题,在其他编辑器或者在win10上没问题,也不影响脚本读取。
②实在看着费劲,也可以改成
改一下file插件中的writelines命令
也是小改动,就是在\n前面加上一个\r,保存一下插件就可以了。
注:插件位置在
至于你选择哪个方法看自己喜好。
三、多模拟器读取文本会出现读不到的情况。
有时候读一行删一行的目的是为了多个模拟器不重复读一行内容,但是这种方法是不行的,很容易出现同时读到同一行内容,这时会导致读不到内容
推荐方法是“排队读取”,具体方法看我另一篇文章教程。
【脚本讲解】多开模拟器读取同一文本不重复
=正文完=