Выделите всю строку из текстового файла с кавычками в строке, используя ADODB в VBScript - PullRequest
0 голосов
/ 06 января 2012

У меня довольно большой текстовый файл с дублирующимися строками.Дубликаты не сразу после друг друга.Я хотел бы получить уникальный набор линий.

Вот код, который я сейчас использую и, кажется, работает довольно хорошо, за исключением того, что я не могу ВЫБРАТЬ всю строку из-за некоторых цитат в каждой строке.

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

strPathToTextFile = "C:\Documents and Settings\"
strFile = "DuplicateLines.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

Мой текстовый файл выглядит примерно так:

DELETE user WITH user_name="TestName" id="123" type="admin"
DELETE user WITH user_name="SecondName" id="456" type="user"
DELETE user WITH user_name="TestName" id="123" type="admin"
DELETE user WITH user_name="TestName" id="123" type="admin"

Оператор My Select возвращает только следующее:

DELETE user WITH user_name=

Заранее спасибо завсем помочь!

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Очевидно, что проблема вызвана "(используется в качестве разделителя по умолчанию для текстовых полей). Верным способом решения проблемы является помещение файла schema.ini в папку strPathToTextFile:

[<strFile>]
ColNameHeader=False
Format=Delimited(;)
TextDelimiter=%
Col1=Line Char Width 500

и удалить избыточную / неправильную информацию из строки подключения:

... "Extended Properties=""text;HDR=NO;FMT=Delimited"""
==>
... "Extended Properties=""text;"""

Убедитесь, что вы выбрали символы, не используемые в ваших данных, и достаточно задали ширину для вашего единственного столбца. После этого я получил:

DELETE user WITH user_name="SecondName" id="456" type="user"
DELETE user WITH user_name="TestName" id="123" type="admin"
1 голос
/ 15 февраля 2012

Я знаю, что этот вопрос помечен как вопрос ADODB / SQL, но упражнение можно решить проще с помощью других средств, т. Е. Если вы используете объекты Scripting.FileSystemObject и Scripting.Dictionary, вы можете реализовать более элегантное решение:

Option Explicit

Const ForReading = 1

Dim objFSO, objFile, objDict, strFile, strLine

strFile = "DuplicateLines.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDict = CreateObject("Scripting.Dictionary")
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
While not objFile.AtEndOfStream
  strLine = objFile.ReadLine
  If Not objDict.Exists(strLine) Then
    Wscript.Echo strLine
    objDict.add strLine, 1
  End If
Wend
...