Определить разделитель файла .txt или .csv, не открывая файл - PullRequest
0 голосов
/ 17 мая 2019

Я создаю функцию импорта для программы, которая позволяет пользователю импортировать данные Excel, текстовые файлы (с любым разделителем) и файлы .csv (с любым разделителем).

Я установил Opendialog и способ определения и ограничения источника данных, но теперь я хочу проверить первую строку (или пару строк текста) в файле .csv или .txt, чтобы определить, какой символ повторяется регулярно через первые 5 строк (наиболее вероятно разделитель) и откройте этот файл, уже разделенный на столбцы этим разделителем.

`Dim delimiter as string

'Determine delimiter...

'For .txt files: 
Workbooks.OpenText Filename:=FileName:=FullPath, DataType:=xlDelimited, Other:=True, OtherChar:=delimiter

'For .csv files:
Workbooks.Open FileName:=FullPath, Format:=6, Delimiter:=delimiter`

Я хотел бы определить наиболее вероятный разделитель, основываясь на символе, который повторяется больше всего в первых нескольких строках текста в файле.

1 Ответ

1 голос
/ 17 мая 2019

Вот код, который, вероятно, будет делать то, что вам нужно:

Sub determine_delim()
    Dim filetocheck As String, firstline As String
    Dim ff As Long
    filetocheck = "full path and name of file here"
    ff = FreeFile

    Open filetocheck For Input As ff
        Line Input #ff, firstline
    Close ff

    delimiter = most_popular(firstline)

End Sub

Function most_popular(str As String)

    Dim pieces As Variant
    Dim cnt As Long, ch as Long
    Dim minCount As Long
    Dim possibles As String

    possibles = "|¦,;" & Chr(9) ' Chr(9)=Tab

    For ch = 1 To Len(possibles)

        pieces = Split(str, Mid(possibles, ch, 1))
        cnt = UBound(pieces)

        If minCount < cnt Then
            minCount = cnt
            most_popular = Mid(possibles, ch, 1)
        End If

    Next ch

End Function

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

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