qq怎么多次发同样的消息,qq怎么能发很多条信息给同一个人

首页 > 经验 > 作者:YD1662024-02-28 23:09:13

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

前言

写脚本的时候会遇到这种问题,就是界面上有重复(相似)的内容,需要循环执行,不过不能重复,比如以下的例子。

qq怎么多次发同样的消息,qq怎么能发很多条信息给同一个人(1)

上面这几个例子在写脚本的时候,如果不做排除重复的处理,就会针对一个内容反反复复做无效操作。

为了避免这种情况的发生,会用文本记录已经操作的内容,然后执行未操作的部分。

一、原理讲解

无论是自动聊天还是数据采集,都是要把得到数据进行一个是否重复的判断。

这里的数据通常来说是字符串,那么我选用文本作为容器存储这些数据,当有新的数据时,先和文本中的原有数据进行逐个比较,看看是否有一样的,如果全部比较之后都没有一样的,就把新数据存入到文本当中。

二、操作思路

(1)存储形式

①按行存储,就是每一个数据放一行,有新数据就新增一行

qq怎么多次发同样的消息,qq怎么能发很多条信息给同一个人(2)

②使用分隔符把每一个数据分开

qq怎么多次发同样的消息,qq怎么能发很多条信息给同一个人(3)

③、使用json格式存储

qq怎么多次发同样的消息,qq怎么能发很多条信息给同一个人(4)

实际应用时每种形式都可以的,看自己的喜好。

(2)不同形式数据的读取

①、按行存储形式的读取

Dim arr = file.readlines("/sdcard/pictures/记录.txt") For i = 1 To Len(arr) TracePrint arr[i] Next

②、分隔符存储形式的读取

Dim path = "/sdcard/pictures/记录.txt" Dim str = file.read(path) Dim arr = split(str,"----") For i = 1 To Len(arr) TracePrint arr[i] Next

③、json存储格式的读取

Dim path = "/sdcard/pictures/记录.txt" Dim str = file.read(path) TracePrint str Dim arr = encode.JsonToTable(str) For i = 1 To Len(arr) TracePrint arr[i] Next

上面几种形式本质上就是两种形式,文中的一行和多行数据形式,读取之后经过处理会把数据变成数组,然后就可以遍历数据了。

后续基本就是对于数组内容的比较,当然也有一种方式就是从文本里面一行一行的读取,相较于一次性读取,这种方法比较耗时。

(3)数据比较

由于从文本读取的数据,最后都会变成数组形式,那么我们做数据比较基本就是看新的数据在数组里面是否存储。

以下例子为了方便,直接定义了一个数组

Dim data = "郭立员" Dim arr = {"3分钟学堂","郭立员","微信xiaomu86119"} For i = 1 To Len(arr) If arr[i] = data Then TracePrint "存在这个数据" End If Next

遍历数据进行判断的过程中,如果出现一样的数据, 就可以结束跳出循环了,如果循环结束后,还没有执行跳出循环,那说明新的数据在数组中没有一样的。

Dim data = "QQ:453485278" Dim arr = {"3分钟学堂","郭立员","微信xiaomu86119"} For i = 1 To Len(arr) If arr[i] = data Then TracePrint "存在这个数据" exit for End If If i = Len(arr) Then TracePrint "这是一个新的数据,没有重复的" End If Next

比较部分数据,比如比较数组的前3个数据或者比较数组的后3个数据。

这种方式的应用场景:比如只想比较最近增加的几个数据是否有重复。

前3个比较方法,这个数量可以自己设置。

Dim data = "QQ:453485278" Dim arr = {"3分钟学堂","郭立员","微信xiaomu86119"} Dim n If len(arr) >= 3 Then n = 3 Else n = len(arr) End If For i = 1 To n If arr[i] = data Then TracePrint "存在这个数据" End If If i = Len(arr) Then TracePrint "这是一个新的数据,没有重复的" End If Next

后3个比较的方法:

Dim data = "QQ:453485278" Dim arr = {"3分钟学堂","郭立员","微信xiaomu86119"} Dim n If len(arr) >= 3 Then n = len(arr)-2 Else n = 1 End If For i = n To len(arr) If arr[i] = data Then TracePrint "存在这个数据" End If If i = Len(arr) Then TracePrint "这是一个新的数据,没有重复的" End If Next

上面两段代码中都做了数组下标范围的判断,防止超出范围引起脚本报错。

(4)新数据的写入

当判断出是新数据后,需要把它写入到文本当中,这里我只以文本多行存储为例写一下代码。

第一步先判断用来当做记录的文本是否存在,如果文本不存在的话,新建一个文本,把数据直接写入到文本中,由于是要写多行,这里我会在数据后面拼接一个换行符 \n ,目的是后续使用追加命令写入文本。

Dim path = "/sdcard/pictures/记录.txt" Dim data = "QQ:453485278" If Dir.Exist(path) = 0 Then file.Write(path,data&"\n") End If

接下来把上面的判断重复代码写上,并在确认是新数据后使用追加命令写入到文本中。

Dim path = "/sdcard/pictures/记录.txt" Dim data = "QQ:453485278" If Dir.Exist(path) = 0 Then file.Write(path,data&"\n") End If Dim arr = file.readlines(path) For i = 1 To Len(arr) If arr[i] = data Then TracePrint "存在这个数据" Exit For End If If i = Len(arr) Then TracePrint "这是一个新的数据,没有重复的" file.Append(path,data&"\n") End If Next

最后封装成函数:

函数的参数:

①、要写入的数据 data [必需参数]

②、文本路径 [非必需参数]

函数的返回值:

写入成功是True,重复数据写入失败是False

Dim data = "微信xiaomu86119" TracePrint 写入文本(data) Function 写入文本(data) Dim path = "/sdcard/pictures/记录.txt" If Dir.Exist(path) = 0 Then file.Write(path,data&"\n") End If Dim arr = file.readlines(path) For i = 1 To Len(arr) If arr[i] = data Then TracePrint "存在这个数据" 写入文本 = False Exit For End If If i = Len(arr) Then TracePrint "这是一个新的数据,没有重复的" file.Append path, data & "\n" 写入文本 = True End If Next End Function

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.