• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[郭立员] 「按键精灵」为啥还有人问“文本怎么读一行删一行”? [复制链接]

1#

大家好,我是公众号3分钟学堂的郭立员~

前言

按理说这个问题很好解决,读一行和删一行都有对应的命令,读一行用file.readline,删一行用file.deleteline,那为啥还总有人问这个问题?

我觉得有这么几种可能性:

一、刚刚接触按键精灵的新手

对命令不熟,不知道用什么命令,这种情况我们不在这期文章的讨论范围。

二、系统兼容性问题

举个例子,我用脚本往文本里面写入4行内容,代码如下:

  1. Dim path="/sdcard/pictures/xx.txt"
  2. file.Write (path)
  3. Dim arr={1,2,3,4}
  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的文本,文本内容是


然后执行“读一行删一行”的操作

  1. Dim txt=file.readline("/sdcard/pictures/xx.txt",1)
  2. TracePrint txt
  3. file.DeleteLine "/sdcard/pictures/xx.txt", 1
复制代码

执行完操作后,文本内容变成这样了,看起来像一行,仅仅是看着像一行


这时有的人就懵逼了,我就删除了第1行,为啥所有行都合并到一起了。

那问题出在哪?

出在file.deleteline命令,也就是删除指定行的内容:

可能你会有个误区,删除文本行就是打开文本以后找到指定行,把整行内容删掉,然后再去掉空行,整个删除操作是在文本内进行的。

其实并不是,删除操作是把所有内容先读取出来,然后删掉不要的内容,在写回文本。

在这个过程中,有一个写入文本的操作,也就是用到上面说的file.WriteLines 命令,所以就存在win7和win10兼容性的问题,导致看不到换行效果。

插件中file.deleteline命令的源码中看到调用writelines函数



那怎么解决这个问题?

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

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

改一下file插件中的writelines命令

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



注:插件位置在


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

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

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

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

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


=正文完=


扫码免费获取我的基础教程【视频教程】
扫码下方二维码关注我的公众号:3分钟学堂

QQ交流群:936858410
发新话题 回复该主题