用安卓按键给文本去重复

昨天晚上群友问了一个文本去重的问题

用安卓按键给文本去重复

因为指定了是用按键去操作,那么我们就不考虑去找现成软件了。直接说一下操作思路及注意的问题。

首先来说,文本自身是没有去重功能的,所以没法直接通过命令控制文本去重。

那么接下来就考虑把文本读出来,在按键里面处理去重以后再写回文本。

按照这个思路,我们以一个具体实例,来说一下具体操作过程:

准备工作,做一个100行的0-50的随机有重复的数字文本。

用安卓按键给文本去重复
源代码:
file.Write (“/sdcard/pictures/2.txt”)
For 100
file.writeline(“/sdcard/pictures/2.txt”,1,int(51*rnd()))
Next

生成文本效果截图:

用安卓按键给文本去重复

我们通过截图可以看到文本里面是有重复数字的,下面我们来说一下文本去重的操作过程:

一、读取文本的内容保存到一个数组里面。

Dim arr=file.readlines(“/sdcard/pictures/2.txt”)

二、定义一个新的空数组,用于存储去重以后的文本。

Dim an=array()

三、把存有文本内容的数组,逐个读取出来,这个用到for循环

For i = 0 To UBOUND(arr)
TracePrint arr(i)
Next

四、把数组中读取的内容,存储到之前定义的空白数组中,逐个存储由于要去重复,所以在每次存储前和数组原有的内容进行比较,看看要存储的内容在数组中是不是存在,如果不存在就存入数组。

这一步是我们去重操作的核心,我们要再叙述的详细一些。

先来看一下代码:

用安卓按键给文本去重复
arr代表原来含有重复的数组

an代表新建的空白数组

用安卓按键给文本去重复

随着数据的存入 an这个数组就会有内容,第一次是1个,第二次可能是2个……只要有不重复的内容,它就会变得越来越多。

For j = 0 To UBOUND(an)
TracePrint an(j)
Next

通过这段代码我们可以读取an数组的所有内容,每次要存入内容前,先和数组内容的所有内容进行比对,看看是不是有重复。

这时有两种可能,(1)存入内容和数组an中的所有内容都不重复;(2)存入内容和数组an中有一个重复的,从存入第一个内容开始,所有内容都是去重后才会存入的,所以最多有一个重复的。

看我的代码,我是通过一个变量n来控制它去重的,每次存入时比对an内容的时候,开始先设置变量n=0,如果比对数组an内容的时候,出现了一个重复的内容,那么就让n=1,结束所有内容比对。

用安卓按键给文本去重复

最后,我们判断一下变量n是0还是1,如果是0说明所有内容没有重复,如果是1说明有重复的内容。

五、给数组添加内容,当上一步中变量n=0,也就是没有重复的情况下,我们要把内容存入数组an中。

an(ubound(an)+1)=要存入的内容

这行代码就是往数组里面添加内容的方法,大家可以记一下。

六、当所有内容都从数组arr去重转存到数组an以后,就可以把数组an重新写入到文本里面了。

file.WriteLines “/sdcard/pictures/2.txt”, an

最后发一下源码:

Dim arr=file.readlines(“/sdcard/pictures/2.txt”)
Dim an=array()
For i = 0 To UBOUND(arr)
Dim n=0
For j = 0 To UBOUND(an)
If arr(i) = an(j) Then
n = 1
Exit For
End If
Next
If n = 0 Then
an(ubound(an)+1)=arr(i)
End If
Next

file.WriteLines “/sdcard/pictures/2.txt”, an

注意一下,这种方法适合文本内容不是很多的情况,如果文本几十万条,几百万,甚至更多的时候,那么这种方法就会比较费时间了。





原文始发于微信公众号(3分钟学堂):

除特别注明外,本站文章均为原创,转载请注明出处和链接!
本文链接地址: https://pumpkinit.com/844.html
Pumpkin  [https://pumpkinit.com]  感谢

发表评论

电子邮件地址不会被公开。 必填项已用*标注