Разделить текстовый файл на несколько текстовых файлов на основе критерия - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть этот текстовый файл и 3 других файла, похожих в папке, которую мне нужно проанализировать и разделить на несколько текстовых файлов на основе имени поставщика. В каждом отчете может быть возможно 8 поставщиков, и всего 1.

Я новичок в VBScript, но немного разбираюсь в кодировании.

Мне удалось прочитать из текстовый файл и найти имена поставщиков, но я не смог ни собрать все данные между именами поставщиков, ни создать отдельный файл для каждого поставщика.

Мне не нужно, чтобы вы писали сценарий, но если бы вы могли дать мне какую-то часть, чтобы заставить меня двигаться, я был бы признателен

Вот код, который у меня есть, который может захватить имена поставщиков (AMGENERAL, JOHN HANCOCK):

' This script will read the INS050 files

   Dim objFSO, strSearchFor, str, strVen, obj

 Const ForReading = 1
 Const ForWriting = 2
 strSearchFor = "1RUN"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = 
objFSO.OpenTextFile("C:\Users\P148044\Documents\INS050E.txt", ForReading)
Set obj = CreateObject("Scripting.FileSystemObject")
Set obj1 = obj.OpenTextFile("C:\Users\P148044\Documents\TestData.txt", 
ForWriting)

do until objTextFile.AtEndOfStream
strLine = objTextFile.ReadLine()

If InStr(strLine, strSearchFor) <> 0 then
For i = 1 to 3
' str = ""
' Wscript.Echo  str
str = objTextFile.ReadLine
str = Left(str,40)
strVen = str
Next

if strVen <> strVen2 Then

obj1.WriteLine(strVen)


End If
strVen2 = strVen
strVen = ""
End If

loop

obj1.Close
Set obj = Nothing
objTextFile.Close

Вот пример отчета:

enter image description here

1 Ответ

0 голосов
/ 28 апреля 2020

Используйте следующий код, пожалуйста:

Option Explicit

Dim objFSO, objTF, fullFilename, strIn, El, arr, arrI
Dim obj1, strVendorPath, strVendor, k, startV, endV, strV, i
'Put the searching elements in an array (they look to appear twice: ones with a short name and second with a longger one:
arr = Split("LINCOLN|LINCOLN NATIONAL,PROTECTIVE|PROTECTIVE LIFE,AMGENERAL|AMERICAN GENERAL,JOHN HANCOCK|JOHN HANCOCK,PACIFIC|PACIFIC LIFE INS,PRUDENTIAL|PRUCO LIFE", ",")
  fullFilename = "C:\Users\P148044\Documents\INS050E.txt"
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objTF = objFSO.OpenTextFile(fullFilename, 1)
        strIn = objTF.ReadAll 'read the text to be analized at once
  objTF.Close

  For Each El In arr
    arrI = Split(El, "|") 'split the array elements in short and long parts
    startV = InStr(strIn, arrI(0)) 'find first element occurrence
    'look for the last occurence
    Dim lngStart
    For i = startV To Len(strIn)
        If endV = 0 then 
        lngstart = startV
        Else
            lngstart = endV + Len(arrI(0))
    End If
        If InStr(lngStart, strIn, arrI(0)) >= startV Then
            endV = InStr(lngStart, strIn, arrI(0))
        Else
            'I observed inconsistencies in the file construction and the short name is not all the time in the same place. 
            'I also observed that after the last occurrence a specific string ends the vendor area
            endV = InStr(endV, strIn, "TOTAL NEW PURCHASE LIFE")
            endV = InStr(endV, strIn, vbLf) + 1 'include the end of the line, too
            If endV = 0 Then endV = Len(strIn)'for the last array element in the string
            strVendor = Mid(strIn, startV, (endV - startV)) 'string area to be extracted
            'building the vendor name file, in the same location with the initial one
            strVendorPath = left(fullFilename, InStrRev(fullFilename, "\")) & arrI(1) & ".txt"

            Set obj1 = objFSO.CreateTextFile(strVendorPath, True, True)
                obj1.Write strVendor 'write the string at once
            obj1.Close
            Exit For 'exiting the loop
        End If
    Next 
    startV = 0: endV = 0 'reinitialising variables
  Next
  MsgBox "Ready..."

Пожалуйста, проверьте его и дайте мне знать, если он делает то, что вам нужно. Надеюсь, вы понимаете код логи c. Я попытался прокомментировать это, чтобы прояснить ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...