Открыть текстовый файл. Разделитель-символ псевдографики

Программирование на Visual Basic for Applications
Timov
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 21.05.2015 (Чт) 18:50

Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение Timov » 21.05.2015 (Чт) 19:09

Есть текстовый файл. В качестве разделителя используется символ 166 - вертикальная черта из псевдографики.
Включаю запись макроса, открываю файл. Все ОК.
Смотрю макрос. Вроде всё на месте.
Код: Выделить всё
Sub Макрос5()
    Workbooks.OpenText Filename:="H:\spl.txt", Origin:=xlMSDOS, StartRow:= _
        1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False _
        , Space:=False, Other:=True, OtherChar:="¦", FieldInfo:=Array(Array(1, 1 _
        ), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)) _
        , TrailingMinusNumbers:=True
End Sub

Пускю макрос. Фигушки. Файл открывается, но на колонки не делится. То есть одна строка файла в первой колонке.
Помогите, кто чем может.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение pronto » 23.05.2015 (Сб) 2:19

Попробуй OtherChar:="¦" заменить на OtherChar:=Chr(124). 124 — код символа вертикальной черты.
O, sancta simplicitas!

Timov
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 21.05.2015 (Чт) 18:50

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение Timov » 23.05.2015 (Сб) 9:34

pronto писал(а):Попробуй OtherChar:="¦" заменить на OtherChar:=Chr(124). 124 — код символа вертикальной черты.

Да не. Со 124 м символом полный ОК.
Я ошибся, говоря о 166 м символе. На самом деле речь идет о 179м символе - вертикальная черта из набора символов псевдографики.
Но, даже если написать
Код: Выделить всё
OtherChar:=Chr(179)
, результат не меняется.
Колонки появляются при таком раскладе
Код: Выделить всё
Origin:=1251
OtherChar:=Chr(179)

Гламурные, такие, колоночки, с кракозябрами. Но моим юзершам-капризулям не нравится.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение pronto » 23.05.2015 (Сб) 13:32

Попробуй другие кодовые страницы: 866, 855, 852, 850...
O, sancta simplicitas!

Timov
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 21.05.2015 (Чт) 18:50

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение Timov » 23.05.2015 (Сб) 15:42

pronto писал(а):Попробуй другие кодовые страницы: 866, 855, 852, 850...


MS-DOS(PC-8),866,850 пробовал. Это те, где русские буквы есть.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение pronto » 23.05.2015 (Сб) 15:53

Кусок подопытного файла может упростить процесс поиска...
O, sancta simplicitas!

Timov
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 21.05.2015 (Чт) 18:50

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение Timov » 24.05.2015 (Вс) 14:40

Вот он
Вложения
spl179.zip
(334 байт) Скачиваний: 335

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение pronto » 24.05.2015 (Вс) 16:39

Разделитель строк не 0D0A, а просто 0A. Такой разделитель строки текстовых файлов используется в Unix-системах. Очень может быть, что именно это является причиной некорректного поведения парсера в Excel'е... Как вариант, попробовать Origin:=xlMacintosh
Сумма:
- Разделитель колонок имеет код 179
- Кодировка 866
- Разделитель строк Unix-style 0A

P.S. Потыкался-потыкался и пришёл к выводу, что разделение на колонки не происходит из-за некорректной передачи/восприятия разделительного символа. Поменял в файле разделитель на знак равно "=" (можно попробовать запятую или точку с запятой) и макрос отработал нормально...
Код: Выделить всё
Workbooks.OpenText Filename:="E:\di PRONTO\spl179\spl179.txt", Origin:=866, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlNone, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, _
Space:=False, Other:=True, OtherChar:="=", FieldInfo:=Array(Array(1, xlTextFormat), Array(2, xlTextFormat), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
TrailingMinusNumbers:=True
O, sancta simplicitas!

Timov
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 21.05.2015 (Чт) 18:50

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение Timov » 25.05.2015 (Пн) 13:51

Да, файл линуксовый. С ними заморочки бывают. Например, не работает построчное считывание из файла
Код: Выделить всё
Line Input #1, tmpstr
. Приходится затевать гемморой с посимвольным считыванием
Код: Выделить всё
nextchar = Input(1, #1)
.
Но в данном случае замена 0A на 0D+0A ничего не меняет.
Использование в качестве разделителя табуляции, ";" , '|' - chr(124) проблем не вызывает.
Я замечал и в других контекстах, что винда не адекватно относится к символам из второй половины таблицы DOSовской кодировки.
Такое ощущение, что смотрит она не номер символа, а на его графическое отображение.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение pronto » 25.05.2015 (Пн) 17:37

Если обрабатываемый файл большой, то проще всего поменять символ-разделитель, а остальной разбор оставить Excel'ю:
1. Отрыть файл как двоичный;
2. Прочитать содержимое файла в байтовый массив;
3. Пройтись по массиву со сравнением If fBuffer(i) = 179 Then fBuffer(i) = 124;
4. Сохранить этот массив в новом файле.
O, sancta simplicitas!

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение alex77755 » 11.06.2015 (Чт) 21:11

Как вариант макрос:
Код: Выделить всё
Sub QWERT()
    Dim A, NAME, R, S, RZ(), C
    NAME = ActiveWorkbook.Path & "\spl.txt"
  A = Split(Read_Text(NAME), Chr(10))
    S = UBound(Split(A(0), ChrW(9474)))
    ReDim RZ(UBound(A) - 1, S - 1)
    For R = 0 To UBound(A) - 1
    S = Split(A(R), ChrW(9474))
        For C = 0 To UBound(S) - 1
        RZ(R, C) = "'" & Trim(S(C))
    Next: Next
    Лист1.Range("A1").Resize(UBound(RZ) + 1, UBound(RZ, 2) + 1) = RZ
End Sub

Function Read_Text(Путь_К_Файлу) As String
    Dim oStream
    Dim S As String
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Type = 2
    oStream.Charset = "CP866"
    oStream.Open
    oStream.LoadFromFile Путь_К_Файлу
    Read_Text = oStream.ReadText
    oStream.Close
End Function

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение alex77755 » 11.06.2015 (Чт) 21:19

вот файлы
Вложения
spl180.rar
(8.24 Кб) Скачиваний: 317

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение alex77755 » 11.06.2015 (Чт) 21:30

Или так. Правда не нравятся пробелы лишние в ячейках, но это не большая проблема убрать их в этом же макросе
поправил
Код: Выделить всё
Sub QWERT2()
    Dim A, NAME, R, S, RZ(), C
    NAME = ActiveWorkbook.Path & "\spl.txt"
    C = Read_Text(NAME)
    Do While InStr(1, C, "  ") > 0
        C = Replace(C, "  ", " ")
    Loop
    A = Split(Replace(C, ChrW(9474), ";"), Chr(10))
    Лист1.Cells.ClearContents
    Лист1.Range("A1").Resize(UBound(A) + 1) = Application.Transpose(A)
    Лист1.Range("A1").Resize(UBound(A) + 1).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, Semicolon:=True, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 4), Array(4, 1), Array(5, 2), Array(6, 2), _
        Array(7, 2), Array(8, 1)), TrailingMinusNumbers:=True
End Sub

Timov
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 21.05.2015 (Чт) 18:50

Re: Открыть текстовый файл. Разделитель-символ псевдографики

Сообщение Timov » 13.06.2015 (Сб) 16:40

Ключевое слово здесь - ChrW(9474). С таким чудесным символом управился и с помощью банального
Код: Выделить всё
OpenText ... OtherChar:=ChrW(9474)...

Но у Вас красивше, конечно. Правда, не люблю я тексты с диска в массивы загонять. Но это от тяжёлого детства. Это по нынешним временам сто мегалитров..., пардон, мешков - на один зуб.
Но, по любому, спасибо. Хоть посмотреть как мастера ваяют.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList