用vbscript實(shí)現(xiàn)從文本文件中刪除所有重復(fù)行的代碼
問(wèn):
您好,腳本專家!如何從文本文件中刪除所有重復(fù)行?
-- SW
答:
您好,SW。您知道,成為一名腳本專家便意味著開始永無(wú)止境地尋找給定問(wèn)題的最終解決方案。(或者至少在我們的經(jīng)理問(wèn)為什么我們似乎從未真正完成什么時(shí),我們是這么告訴他的:“老板,永無(wú)止境的尋找過(guò)程需要時(shí)間!”)這就是為什么我們很高興看到您的問(wèn)題的原因。不久前 我們回答了一個(gè)關(guān)于從文本文件中刪除重復(fù)名字的類似問(wèn)題。我們想到的解決方案十分簡(jiǎn)單而且效果不錯(cuò);只是我們不確定那是最佳解決方案。現(xiàn)在,很感謝您的問(wèn)題,我們可以再次嘗試解決這一問(wèn)題。至于此解決方案是否比我們之前提供的更好/更快/更方便,還是由您來(lái)決定吧。
首先,假定您有一個(gè)文本文件,其中每一行都表示一條單獨(dú)的記錄。這似乎不太可能,但也許您的文件類似如下:
This is one of the lines in the text file.
This is one of the lines in the text file.
This is another line in the text file.
This is one of the lines in the text file.
This is yet another line in the text file.
This is another line in the text file.
This is another line in the text file.
This is one of the lines in the text file.
您需要一個(gè)可以除去所有重復(fù)行并提供類似以下輸出的腳本:
This is one of the lines in the text file.
This is another line in the text file.
This is yet another line in the text file.
SW,您找對(duì)地方了:
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
strPathToTextFile = "C:\Scripts\"
strFile = "Test.txt"
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strPathtoTextFile & ";" & _
"Extended Properties=""text;HDR=NO;FMT=Delimited"""
objRecordSet.Open "Select DISTINCT * FROM " & strFile, _
objConnection, adOpenStatic, adLockOptimistic, adCmdText
Do Until objRecordSet.EOF
Wscript.Echo objRecordSet.Fields.Item(0).Value
objRecordSet.MoveNext
Loop
我們發(fā)現(xiàn)此腳本有些有趣,因?yàn)槲覀兪褂谩癆ctiveX 數(shù)據(jù)對(duì)象”(ADO) 并將此文本文件當(dāng)作數(shù)據(jù)庫(kù)處理。我們不會(huì)花費(fèi)過(guò)多的時(shí)間詳細(xì)說(shuō)明如何將文本文件當(dāng)作數(shù)據(jù)庫(kù)處理;如果您想了解有關(guān)于此的詳細(xì)信息,我們的腳本診所 專欄對(duì)此主題進(jìn)行了深入闡述。現(xiàn)在,要說(shuō)明的只是我們將使用文本文件 C:\Scripts\Test.txt,我們通過(guò)為變量 strPathToTextFile 和 strFile 賦予相應(yīng)值來(lái)表示:
strPathToTextFile = "C:\Scripts\"
strFile = "Test.txt"
那么,這如何能讓我們除去重復(fù)行呢?是這樣的,有一種稱為 Select DISTINCT 的數(shù)據(jù)庫(kù)查詢;利用 Select DISTINCT 可以選擇表格中所有不同的(或唯一的)記錄。假設(shè)您有一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù),其中有以下記錄:
Red
Red
Blue
Red
如果使用 Select DISTINCT 查詢,您將得到一個(gè)只包括唯一記錄的記錄集:
Red
Blue
毫無(wú)疑問(wèn),您會(huì)想:“哇!返回唯一記錄與刪除重復(fù)記錄簡(jiǎn)直異曲同工?!蔽覀兂姓J(rèn)確實(shí)如此 – 嗯,請(qǐng)等一下:您的想法絕對(duì)正確。我們的文本文件構(gòu)建得就像一個(gè)數(shù)據(jù)庫(kù)表,文本文件中的每行都表示一條記錄中的一個(gè)字段。如果對(duì)此文本文件運(yùn)行 Select DISTINCT 查詢,我們將只得到唯一的行。事實(shí)上,我們將得到如下所示的記錄集:
This is one of the lines in the text file.
This is another line in the text file.
This is yet another line in the text file.
這剛好就是我們希望返回的信息。您為我們指出了這一點(diǎn),這很好!
檢索記錄集后,我們?cè)偈褂靡韵麓a將唯一的行回顯到屏幕:
Do Until objRecordset.EOF
Wscript.Echo objRecordset.Fields.Item(0).Value
objRecordset.MoveNext
Loop
如果我們?cè)敢?,也可以使?nbsp;FileSystemObject 打開文本文件,然后僅用唯一的行替換現(xiàn)有內(nèi)容;此種方法與從文本文件中刪除所有重復(fù)行效果相同。(如果我們能使用某種 Update 查詢執(zhí)行此操作,效果會(huì)很好,但處理文本文件時(shí),ADO 卻是只讀的。)
那么,這是從文本文件刪除重復(fù)項(xiàng)(無(wú)論是姓名還是整個(gè)行)的最終結(jié)論嗎?唉,誰(shuí)知道:畢竟,永無(wú)止境的尋找過(guò)程需要時(shí)間?。▽?shí)際上,我們發(fā)現(xiàn)這只需要大約 2 到 3 天。然后,我們便開始覺(jué)得無(wú)聊,又繼續(xù)做其他事情。)
上一篇:最新惡意復(fù)制型病毒autorun.inf,stNP.VBS,NP.VBS代碼簡(jiǎn)單解析和解決方法
欄 目:vb
下一篇:把vbscript發(fā)揮到它的極限應(yīng)用之一(數(shù)組)?。?!
本文標(biāo)題:用vbscript實(shí)現(xiàn)從文本文件中刪除所有重復(fù)行的代碼
本文地址:http://mengdiqiu.com.cn/a1/vb/7845.html
您可能感興趣的文章
- 01-10VBS中的正則表達(dá)式的用法大全 <font color=red>原創(chuàng)&
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10VBScript教程 第十一課深入VBScript
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript語(yǔ)法速查及實(shí)例說(shuō)明
- 01-10VBS中Select CASE的其它用法
- 01-10VBScript教程 第七課使用條件語(yǔ)句
- 01-10vbscript 可以按引用傳遞參數(shù)嗎?
- 01-10VBScript教程 第二課在HTML頁(yè)面中添加VBscript代碼
- 01-10VBScript教程 第十四課在VBScript中使用對(duì)象


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10飄葉千夫指源代碼,又稱qq刷屏器
- 01-10SendKeys參考文檔
- 01-10什么是一個(gè)高效的軟件
- 01-10VBS中的正則表達(dá)式的用法大全 &l
- 01-10exe2swf 工具(Adodb.Stream版)
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript教程 第十一課深入VBScript
- 01-10VBScript語(yǔ)法速查及實(shí)例說(shuō)明
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置