佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 用vbscript實現(xiàn)從文本文件中刪除所有重復行的代碼

用vbscript實現(xiàn)從文本文件中刪除所有重復行的代碼

熱門標簽:檢查注冊表項 服務(wù)器配置 呼叫中心市場需求 銀行業(yè)務(wù) 智能手機 網(wǎng)站文章發(fā)布 美圖手機 鐵路電話系統(tǒng)

問:
您好,腳本專家!如何從文本文件中刪除所有重復行?

-- SW

答:
您好,SW。您知道,成為一名腳本專家便意味著開始永無止境地尋找給定問題的最終解決方案。(或者至少在我們的經(jīng)理問為什么我們似乎從未真正完成什么時,我們是這么告訴他的:“老板,永無止境的尋找過程需要時間!”)這就是為什么我們很高興看到您的問題的原因。不久前 我們回答了一個關(guān)于從文本文件中刪除重復名字的類似問題。我們想到的解決方案十分簡單而且效果不錯;只是我們不確定那是最佳解決方案?,F(xiàn)在,很感謝您的問題,我們可以再次嘗試解決這一問題。至于此解決方案是否比我們之前提供的更好/更快/更方便,還是由您來決定吧。

首先,假定您有一個文本文件,其中每一行都表示一條單獨的記錄。這似乎不太可能,但也許您的文件類似如下:

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.

您需要一個可以除去所有重復行并提供類似以下輸出的腳本:

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,您找對地方了:

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)此腳本有些有趣,因為我們使用“ActiveX 數(shù)據(jù)對象”(ADO) 并將此文本文件當作數(shù)據(jù)庫處理。我們不會花費過多的時間詳細說明如何將文本文件當作數(shù)據(jù)庫處理;如果您想了解有關(guān)于此的詳細信息,我們的腳本診所 專欄對此主題進行了深入闡述?,F(xiàn)在,要說明的只是我們將使用文本文件 C:\Scripts\Test.txt,我們通過為變量 strPathToTextFile 和 strFile 賦予相應(yīng)值來表示:

strPathToTextFile = "C:\Scripts\"
strFile = "Test.txt"

那么,這如何能讓我們除去重復行呢?是這樣的,有一種稱為 Select DISTINCT 的數(shù)據(jù)庫查詢;利用 Select DISTINCT 可以選擇表格中所有不同的(或唯一的)記錄。假設(shè)您有一個簡單的數(shù)據(jù)庫,其中有以下記錄:


Red
Red
Blue
Red

如果使用 Select DISTINCT 查詢,您將得到一個只包括唯一記錄的記錄集:

Red
Blue

毫無疑問,您會想:“哇!返回唯一記錄與刪除重復記錄簡直異曲同工?!蔽覀兂姓J確實如此 – 嗯,請等一下:您的想法絕對正確。我們的文本文件構(gòu)建得就像一個數(shù)據(jù)庫表,文本文件中的每行都表示一條記錄中的一個字段。如果對此文本文件運行 Select DISTINCT 查詢,我們將只得到唯一的行。事實上,我們將得到如下所示的記錄集:

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.

這剛好就是我們希望返回的信息。您為我們指出了這一點,這很好!

檢索記錄集后,我們再使用以下代碼將唯一的行回顯到屏幕:

Do Until objRecordset.EOF
    Wscript.Echo objRecordset.Fields.Item(0).Value   
    objRecordset.MoveNext
Loop

如果我們愿意,也可以使用 FileSystemObject 打開文本文件,然后僅用唯一的行替換現(xiàn)有內(nèi)容;此種方法與從文本文件中刪除所有重復行效果相同。(如果我們能使用某種 Update 查詢執(zhí)行此操作,效果會很好,但處理文本文件時,ADO 卻是只讀的。)

那么,這是從文本文件刪除重復項(無論是姓名還是整個行)的最終結(jié)論嗎?唉,誰知道:畢竟,永無止境的尋找過程需要時間?。▽嶋H上,我們發(fā)現(xiàn)這只需要大約 2 到 3 天。然后,我們便開始覺得無聊,又繼續(xù)做其他事情。)

您可能感興趣的文章:
  • 批處理 刪除重復行的代碼
  • python統(tǒng)計一個文本中重復行數(shù)的方法
  • ASP.NET DataTable去掉重復行的2種方法
  • php刪除文本文件中重復行的方法
  • 批處理實現(xiàn)過濾重復行

標簽:上海 長治 河南 滄州 紅河 樂山 沈陽 新疆

巨人網(wǎng)絡(luò)通訊聲明:本文標題《用vbscript實現(xiàn)從文本文件中刪除所有重復行的代碼》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    平塘县| 高要市| 来安县| 临沧市| 堆龙德庆县| 镶黄旗| 大港区| 阿瓦提县| 贵州省| 楚雄市| 盐城市| 碌曲县| 登封市| 右玉县| 教育| 成武县| 邢台市| 闻喜县| 秀山| 甘谷县| 那曲县| 陇西县| 京山县| 丁青县| 汉阴县| 玉田县| 平原县| 安化县| 黄龙县| 西峡县| 婺源县| 乐昌市| 平邑县| 遂昌县| 凤山市| 云安县| 锡林浩特市| 墨江| 商水县| 那坡县| 彭州市|