按键精灵循环输入文本里面的内容(按键精灵为啥还有人问)

大家好,我是公众号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行。效果如图所示:

按键精灵循环输入文本里面的内容(按键精灵为啥还有人问)(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函数

按键精灵循环输入文本里面的内容(按键精灵为啥还有人问)(2)

那怎么解决这个问题?

①不去管它,因为只有在win7文本有问题,在其他编辑器或者在win10上没问题,也不影响脚本读取。

②实在看着费劲,也可以改成

改一下file插件中的writelines命令

也是小改动,就是在\n前面加上一个\r,保存一下插件就可以了。

按键精灵循环输入文本里面的内容(按键精灵为啥还有人问)(3)

注:插件位置在

至于你选择哪个方法看自己喜好。

三、多模拟器读取文本会出现读不到的情况。

有时候读一行删一行的目的是为了多个模拟器不重复读一行内容,但是这种方法是不行的,很容易出现同时读到同一行内容,这时会导致读不到内容

推荐方法是“排队读取”,具体方法看我另一篇文章教程。

【脚本讲解】多开模拟器读取同一文本不重复

=正文完=

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页