Разбор и форматирование текстового файла - PullRequest
0 голосов
/ 28 марта 2020

У меня есть текстовый файл не в том формате, который я могу использовать для печати этикеток. Текущий формат выглядит следующим образом:

DY234-02   0.5   0.5   Qty 6
U21 U12 U14 U28

TR459-09   0.5   0.5   Qty 9
U11 U78 U7 U8 U30 U24

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

DY234-02   0.5   0.5   Qty 6 U21 U12 U14 U28
TR459-09   0.5   0.5   Qty 9 U11 U78 U7 U8 U30 U24

Файлы содержат около 100 строк этого формата, я использовал vbscript, чтобы попробовать чтобы получить то, что мне нужно, но формат не сильно отличается. Если бы кто-то мог направить меня в правильном направлении, это было бы здорово. Я открыт для всех других методов для достижения этой цели. Спасибо

Это мой код в VBScript, но он не выполняет свою работу правильно:

Const ForReading = 1

Const ForWriting = 2


Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFile = objFSO.OpenTextFile("C:\Scripts\parse.txt", ForReading)

Do Until objFile.AtEndOfStream

    strLine1 = objFile.ReadLine

    strLine2 = ""

    If Not objFile.AtEndOfStream Then

        strLine2 = objFile.ReadLine

    End If

    strNewLine = strLine1 & strLine2

    strNewContents = strNewContents & strNewLine & vbCrLf

Loop

objFile.Close

Set objFile = objFSO.OpenTextFile("C:\Scripts\B3.txt", ForWriting, True)

objFile.Write strNewContents

objFile.Close

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

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

Dim strInFile As String
Dim strOutFile As String
Dim intInFile As Integer
Dim intOutFile As Integer
Dim strInput As String
Dim strOutput As String
strInFile = "J:\downloads\data-in.txt"
strOutFile = "J:\downloads\data-out.txt"
intInFile = FreeFile
Open strInFile For Input As intInFile
intOutFile = FreeFile
Open strOutFile For Output As intOutFile
Do
    Line Input #intInFile, strInput
    If Len(Trim(strInput)) > 0 Then
        strOutput = strOutput & " " & strInput
    Else
        strOutput = strOutput & vbCrLf
    End If
Loop Until EOF(intInFile)
Print #intOutFile, strOutput
Reset

С уважением,

0 голосов
/ 28 марта 2020

Попробуйте следующий код, пожалуйста. Это быстро из-за того, что читает все текстовые значения одновременно и сбрасывает результат, также сразу. Все происходит в памяти.

Sub testSplitTextFile()
 Dim objFSO As Object, objTF As Object, strIn As String, fullFilename As String, retFile As String
 Dim arrIn As Variant, strRet As String, i As Long
  'use here your path
  fullFilename = "C:\Teste VBA Excel\Teste StackOverflow\TestSplit.txt"
  retFile = "C:\Teste VBA Excel\Teste StackOverflow\RetFile.txt"'your path

  Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTF = objFSO.OpenTextFile(fullFilename, 1)
        strIn = objTF.ReadAll 'it reads all the txt file string
    objTF.Close
    arrIn = Split(strIn, vbCrLf) 'it splits the above string on lines
    'Then, it builds a string based on your conditions:
    For i = 0 To UBound(arrIn) - 1
        If arrIn(i) <> "" And arrIn(i + 1) <> "" Then
            strRet = strRet & arrIn(i) & " " & arrIn(i + 1) & vbCrLf
        End If
    Next i
    strRet = left(strRet, Len(strRet) - 1)' it eliminates the last vbCrLf character
    FreeFile 1
    Open retFile For Output As #1
        Print #1, strRet 'it drops, at once the created string
    Close #1
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...