大家好,我是3分钟学堂的郭立员,今天给大家带来一个比较实用的去重复内容后写入文本的函数。
应用场景
这个函数的常见使用场景有这些~
①记录账号
②提取接码群的验证码
③采集各类信息资料
由于具备写入功能,其实所有需要写入文本的地方都可以用这个命令。
原理
在写入文本前,先将要写入的内容和文本里面的内容逐个进行比较,确认不重复在进行写入操作。
操作过程
①判断文本是否存在,防止由于不存在文本路径的报错,如果不存再新建一个文本。
- Dim path="/sdcard/pictures/abc.txt"
- If Dir.Exist(path) = 0 Then
- file.Write(path)
- End If
复制代码②读取文本中原有内容,存入数组中
Dim arr=file.readlines(
path)
③判断数组是不是空内容,因为首次写入的时候,文本是空内容,那么数组最大下标就是-1。这种首次写入的情况,就直接写入,无需判断是否重复。
- If UBOUND(arr) < 0 Then
- TracePrint "首次写入"
- End If
复制代码④非首次写入,我们要遍历数组内容,这里有两种方式,一是遍历全部内容,二是遍历最新的几条写入内容。
之所以有两种情况,是它们各有优缺点,第一种方式:优点是准确,缺点是当内容非常多的时候,遍历时间会比较长。第二种方式:优点是速度快,缺点是没有那么准确。要求速度的情况下用第二种,数据不是特别多的情况下用第一种。
- Dim num
- If 第一种情况 Then
- num = UBOUND(arr)
- ElseIf 第二种情况 Then
- num=10
- End If
- For i = 0 To num
- TracePrint arr(i)
- Next
复制代码⑤把要写入的内容和读取文本内容逐个比对,确认不重复写入文本第一行
- For i = 0 To 10
- If str = arr(i) Then
- Exit For
- End If
- If i = num Then
- file.WriteLine(path,1,str)
- End If
- Next
复制代码细节注意
写入的内容在比对之前一定要转成字符串类型,因为遍历文本的内容是字符串,如果写入一个数字不转成字符串,因为数据类型的不同,虽然是同样的内容,也会认为是比对不同,从而重复写入。
给函数加入返回值,写入成功返回ture,写入失败返回false。
完整代码如下:
Dim str=16
Dim path="/sdcard/pictures/abc.txt"
traceprint WriteFile(path,0,str)
/*
此函数由公众号3分钟学堂提供,仅供学习使用
WriteFile命令参数说明
参数1:写入文本的路径,支持自动新建文本
参数2:文本全部匹配还是部分匹配,0:全部匹配,其他数字:部分匹配的行数,如10,就是匹配10行内容
参数3:要写入文本的内容
*/
Function WriteFile(path, n, str)
Dim num
If Dir.Exist(path) = 0 Then
file.Write(path)
End If
Dim arr=file.readlines(path)
If UBOUND(arr) < 0 Then
file.WriteLine path, 1, str
WriteFile=true
Else
If n = 0 Then
num= UBOUND(arr)
Else
num=n
End If
End If
For i = 0 To num
If cstr(str) = arr(i) Then
WriteFile=false
Exit For
End If
If i = num Then
file.WriteLine path, 1, str
WriteFile=true
End If
Next
End Function
如果file.writeline命令写入不了,可以使用file.append命令,只需要写入的内容+换行符