大家好,我是公眾號(hào)3分鐘學(xué)堂的郭立員!說(shuō)到記憶這個(gè)詞我們肯定會(huì)想到人本身,一個(gè)人通過(guò)感官獲取到外部信息以后,就會(huì)存儲(chǔ)到大腦當(dāng)中,形成了長(zhǎng)期或者短期記憶。比如看到的、聽(tīng)到的、聞到的、觸碰到的都能存儲(chǔ)到大腦當(dāng)中。
對(duì)于腳本來(lái)說(shuō),就沒(méi)有這么復(fù)雜了,主要就是看到的,包括圖片、文字。那么我們?cè)趺慈ビ洃浺约霸趺刺崛∮洃浭褂?,就是這篇文章要講的主要內(nèi)容了。
我們先來(lái)看看“文字的記憶“,很多軟件都有配置文件,那個(gè)其實(shí)就具有記憶功能,對(duì)于按鍵精靈安卓版來(lái)說(shuō),最簡(jiǎn)單的方式就是通過(guò)文本記錄,常用到的命令就是寫入命令。我們先來(lái)看一段代碼:
dim a="我要記憶的內(nèi)容"
dim path="/sdcard/pictures/1.txt" //"我要存儲(chǔ)的位置是雷電模擬器的共享文件夾當(dāng)中的1.txt這個(gè)文本當(dāng)中"
file.write(path,a)
當(dāng)我運(yùn)行這段代碼之后,在共享文件夾里面會(huì)出現(xiàn)一個(gè)1.txt文本,文本內(nèi)容為"我要記憶的內(nèi)容",這就實(shí)現(xiàn)了“記憶”功能。
對(duì)于記憶來(lái)說(shuō),我們簡(jiǎn)單分成了短期記憶和長(zhǎng)期記憶。
短期記憶是上面代碼中的file.write命令,之所以叫它短期記憶,是因?yàn)橹灰芜\(yùn)行這個(gè)命令,原來(lái)的內(nèi)容就會(huì)被新的內(nèi)容覆蓋,多次運(yùn)行以后,就只保留了最后一次運(yùn)行的內(nèi)容,所以叫它短期記憶。
當(dāng)然不是說(shuō)用了file.write命令就一定是短期記憶,如果每次存儲(chǔ)的文件名不同,它也可以變成長(zhǎng)期記憶。我們看一下代碼:
dim arr=array("我要記憶的內(nèi)容1","我要記憶的內(nèi)容2","我要記憶的內(nèi)容3")
dim path="/sdcard/pictures/" //"我要存儲(chǔ)的位置是雷電模擬器的共享文件夾"
For i = 1 To 3
file.write(path&i&".txt",arr(i-1))
Next
運(yùn)行這段代碼以后,就會(huì)在文件夾里面生成3個(gè)文本,因?yàn)槊植煌?,所以它們不?huì)互相干擾,避免了被覆蓋的可能,從而形成了長(zhǎng)期記憶。
我們?cè)僬f(shuō)一下另外一種長(zhǎng)期記憶,就是在同一個(gè)文本里面插入內(nèi)容,并且保留原始內(nèi)容,常用命令是file.writeline。這個(gè)命令可以執(zhí)行在文本的某一個(gè)行里面添加內(nèi)容,不會(huì)覆蓋掉原來(lái)的內(nèi)容。
我們來(lái)看一下代碼:
dim arr=array("我要記憶的內(nèi)容1","我要記憶的內(nèi)容2","我要記憶的內(nèi)容3")
dim path="/sdcard/pictures/1.txt" //"我要存儲(chǔ)的位置是雷電模擬器的共享文件夾1.txt"
For i = 1 To 3
file.writeline(path,1,arr(i-1))
Next
通過(guò)運(yùn)行代碼我們可以看到1.txt這個(gè)文本里面有3行內(nèi)容(看下圖),就是我們要記錄的內(nèi)容,這個(gè)命令需要特別注意,必須要在運(yùn)行代碼前,文件夾里面一定要有對(duì)應(yīng)的文本文件,命令不會(huì)新建文件,如果沒(méi)有對(duì)應(yīng)的文件,就會(huì)報(bào)錯(cuò)。
當(dāng)然上圖當(dāng)中,我們可能會(huì)看到文本內(nèi)容是3、2、1這個(gè)順序,這是因?yàn)槊看未鎯?chǔ)的時(shí)候都會(huì)插入第一行,所以后插入的內(nèi)容,就會(huì)在第一行,如果我們想要在最后一行插入,就需要每次獲取當(dāng)前文本中一共有多少行,然后再去指定的最后一行插入內(nèi)容。
還是看一下代碼:
dim arr=array("我要記憶的內(nèi)容1","我要記憶的內(nèi)容2","我要記憶的內(nèi)容3")
dim path="/sdcard/pictures/1.txt" //"我要存儲(chǔ)的位置是雷電模擬器的共享文件夾1.txt"
Dim line //行號(hào)
For i = 1 To 3
line = file.LinesNumber(path)
file.writeline(path,line,arr(i-1))
Next
寫到這里是不是有人覺(jué)得長(zhǎng)期記憶要比短期記憶好,以后如果用到“記憶”這個(gè)功能的時(shí)候,就用長(zhǎng)期記憶,其實(shí)這么想是不對(duì)的,這個(gè)要根據(jù)具體的需要,對(duì)于短期記憶來(lái)說(shuō)操作更簡(jiǎn)便,因?yàn)橹挥幸粋€(gè)內(nèi)容,也避免了干擾項(xiàng),使用的時(shí)候不容易出錯(cuò)。至于使用哪種方式?jīng)]有固定的,有的時(shí)候甚至是長(zhǎng)期和短期記憶同時(shí)使用。
說(shuō)到使用了,那么我就來(lái)看看怎么提取這個(gè)“記憶”,在命令庫(kù)里面我們是有file.read、file.readline、file.readlines命令,它們都是讀取命令,關(guān)于命令的介紹,大家可以直接看命令庫(kù),我來(lái)說(shuō)一下,提取的思路。
Dim m=file.read("/sdcard/pictures/1.txt")
If m = null Then?
TracePrint "因?yàn)槲谋臼强盏模@是首次記憶內(nèi)容"
Else
TracePrint "讀取的內(nèi)容是:"&m
End If
這段代碼除了有讀取功能外,還有判斷功能,這個(gè)就是提取的思路,不是簡(jiǎn)單的讀取。
分析一下這段代碼,我主要寫了讀取1.txt這個(gè)文本,然后對(duì)讀取的內(nèi)容進(jìn)行判斷是不是空白的,如果是空白的,說(shuō)明之前沒(méi)有“記憶”過(guò)內(nèi)容,腳本是首次使用,如果有內(nèi)容,我就把內(nèi)容輸出來(lái),可以清楚的看到內(nèi)容是什么,之后腳本就可以根據(jù)內(nèi)容來(lái)執(zhí)行下一步具體的功能。
如果想要實(shí)現(xiàn)更復(fù)雜的功能,可以把文本內(nèi)容賦予特定的意義,比方說(shuō),讀取到的文本是1,就讓腳本執(zhí)行第一個(gè)功能,讀取到的文本是2,就讓腳本執(zhí)行第二個(gè)功能,以此類推,可以給腳本賦予無(wú)限多的可能性。
關(guān)于文字記憶功能差不多就是這些內(nèi)容,但是在實(shí)際應(yīng)用的過(guò)程中,很可能是多次存儲(chǔ)以及多次提取的混合使用,對(duì)于提取的內(nèi)容二次處理也是非常重要的,還有涉及到大量的判讀處理,我們?cè)趯W(xué)習(xí)過(guò)程中要不斷練習(xí),培養(yǎng)自己的編程思維。
下面說(shuō)一下圖片記憶功能:
對(duì)于“記憶”這個(gè)功能,其實(shí)就是兩個(gè)操作——存儲(chǔ)和提取。
圖片的存儲(chǔ)我們用snapshot命令,提取我們就用找圖命令。
先來(lái)看一個(gè)例子
我想要截取“賬戶”這個(gè)位置的圖片。
SnapShot "/sdcard/pictures/1.png",70,388,111,416
生成了一個(gè)叫做1.png的圖片,這個(gè)圖片就是我剛剛截圖保存的。如果你想要“長(zhǎng)期記憶”那么每一次截圖的文件名都要不同,否則就會(huì)被覆蓋變成了“短期記憶”。
在提取記憶的時(shí)候我們是用找圖命令,我們通常找圖命令是這樣寫的
圖片先要手動(dòng)放到按鍵精靈的附件里面,之后在代碼當(dāng)中填寫圖片路徑"Attachment:1.png",這樣才能找到指定的圖片。我們這篇文章講的是腳本自己記憶,肯定不能用手動(dòng)添加附件的方式,那么我就要修改找圖命令的圖片路徑了,其實(shí)找圖命令是支持手機(jī)(模擬器)文件路徑的,也就是說(shuō)上面的代碼我們?cè)诓惶砑痈郊那闆r下,可以寫成這樣:
Dim intX, intY
FindPic 0, 0, 0, 0, "/sdcard/pictures/1.png", "000000", 0, 0.9, intX, intY
If intX > -1 And intY > -1 Then?
TracePrint "找到圖了"
End If
這里的圖片路徑是"/sdcard/pictures/1.png",和我之前截圖的路徑是完全一樣的了。那么我們就可以把存儲(chǔ)和提取結(jié)合在一起,形成完整的記憶了。
Dim intX, intY
Do
FindPic 0, 0, 0, 0, "/sdcard/pictures/1.png", "000000", 0, 0.9, intX, intY
If intX > -1 And intY > -1 Then?
TracePrint "找到圖了,記錄一下當(dāng)前的位置"
Delay 500
SnapShot "/sdcard/pictures/1.png",70,388,111,416
Exit Do
Else?
TracePrint "沒(méi)有找到圖,要往上滑動(dòng)了"
Delay 500
Swipe 200,600,200,500,1000
End If
Delay 1000
Loop
這段代碼完成的功能是每次找到圖以后,記錄一下當(dāng)前指定位置的圖片,保存到指定路徑,這樣當(dāng)腳本出現(xiàn)錯(cuò)誤,或者手動(dòng)關(guān)閉,再次開啟的時(shí)候,就可以知道上次腳本運(yùn)行到哪個(gè)“畫面”了。
我的代碼是把截圖命令放到找圖命令里面,實(shí)際腳本可能會(huì)放在完成某個(gè)具體的功能后面,比如聊天軟件當(dāng)中和某個(gè)人對(duì)話后,截取對(duì)方頭像保存下來(lái),下次在進(jìn)入聊天窗口以后,可以通過(guò)判斷畫面中有沒(méi)有截圖存儲(chǔ)的頭像,來(lái)判讀是不是之前進(jìn)行過(guò)對(duì)話。
最后我想說(shuō),關(guān)于記憶功能在實(shí)際應(yīng)用當(dāng)中,不同場(chǎng)景的應(yīng)用代碼是不同的,所以大家不要單純的套用上面我寫的代碼,要學(xué)會(huì)舉一反三。