Преобразовать TXT-файл, который использует разделитель пробелов в разделитель табуляции - PullRequest
0 голосов
/ 23 января 2019

У меня есть файл Excel, который импортирует цены из различных текстовых файлов, которые автоматически создаются третьей стороной.Я столкнулся с дорожным блоком одним из текстовых файлов, потому что он использует разделитель пробела, в то время как другие используют табуляцию.Из-за разделенного пробела, когда я разделяю данные, я получаю разные значения в каждом столбце.

Вот что у меня есть, чтобы открыть и прочитать текстовый файл

        usFileName = PathName & "\" & "Prices.txt"

        If fs.FileExists(usFileName) Then
            Set US = fs.OpenTextFile(usFileName, 1)

            theData = US.ReadLine
            getDate = Split(theData, Chr(0))
            curDate = Trim(Left(getDate(0), 10))

            If curDate = ActiveSheet.Range("Sheet_Date") Then
                    Do While Not US.AtEndOfStream
                        On Error Resume Next
                        Ln = US.ReadLine
                        Cols = Split(Ln, "  ")
                        Price = Trim(Cols(7))
                        NameTrim = Trim(Replace(Cols(1), "USO-", ""))
                        CellName = Replace(NameTrim, "-", "_") & "_" & Trim(Cols(2))

                        If ActiveSheet.Range(CellName) Is Nothing Then
                            ''Do Nothing here
                            On Error Resume Next
                        Else

                            Set TxtRng = ActiveSheet.Range(CellName)

                            If TxtRng = ActiveSheet.Range(CellName) Then
                                TxtRng.Value = Price
                            End If
                        End If
                    Loop

                Else
                    MsgBox ("The current sheet date does not match the US file import date.")
                End If

            US.Close
        Else
            MsgBox ("The file Prices.txt does not exist.")
        End If

Этокак выглядит текстовый файл:

01/11/2019 06:00 PM  USO-FOX-USO  E10           8.9929     0.0000
01/11/2019 06:00 PM  USO-FOX-USO  CON8HE10      1.3212    -0.0244
01/11/2019 06:00 PM  USO-FOX-USO  CON8HE10TT    1.3232    -0.0244

А вот так выглядит переменная Cols.

Cols Output Cols Output 2

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете попробовать удалить пробелы и заменить их следующим образом:

    Ln = US.ReadLine
    Do While (InStr(Ln, "  ") > 0)
        Ln = Replace(Ln, "  ", " ")
    Loop
    'The only problem I see is the case where you have Time (6:00 PM) this 
    '    would replace the space with Tab. in that case, I would do the following:
    Ln = Replace(Ln, " PM", "PM")
    Ln = Replace(Ln, " AM", "AM")
    Ln = Replace(Ln, " ", vbTab)

    'And then put them back
    Ln = Replace(Ln, "PM", " PM")
    Ln = Replace(Ln, "AM", " AM")

    'Finally, split the columns
    Cols = Split(Ln, vbTab)

Если вы хотите попробовать с фиксированной шириной, сделайте следующее (после Ln = US.Readline):

    '01/11/2019 06:00 PM  USO-FOX-USO  E10           8.9929     0.0000    
    'Do the following only if (InStr(Ln, "  ") > 0)
    strCol1 = Mid(Ln, 1, 21)  
    strCol2 = Mid(Ln, 22, 13)  
    strCol3 = Mid(Ln, 35, 13)  
    strCol4 = Mid(Ln, 48, 11)  
    strCol5 = Mid(Ln, 59, Len(Ln))  

0 голосов
/ 23 января 2019

Попробуйте

Sub Test()

    Dim PathName As String
    Dim usFileName  As String

    PathName = "Your path"
    usFileName = PathName & "\" & "Prices.txt"

    Workbooks.OpenText Filename:=usFileName, _
        StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), _
        Array(19, 1), Array(32, 1), Array(48, 1), Array(55, 1))

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