Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Распарсить не стандартный текстовый файл. Ответ оборудования через телнет. / 6 сообщений из 6, страница 1 из 1
16.02.2019, 11:54
    #39774851
Распарсить не стандартный текстовый файл. Ответ оборудования через телнет.
Доброго дня. Есть технически сложное оборудование, с которого можно получить информацию через telnet. Задача распарсить полученный ответ в таблицу (файл в аттаче по ответу с одной железки, а их много).
В данном примере на оборудование посланы три команды
ZQRI:BCXU::VLAN700:;
ZQRI:BCXU::VLAN701:;
ZQRI:ETME::VLAN23;
и по ним получен ответ.
Т.к. платы на оборудовании могут свичернуться, то IP адрес перейдет на другую плату.
В идеале парсить ответ оборудования сразу в таблицу на лету. Но с этим пока сложно, нужно распарсить хотя бы файл, а потом попытаться работать на лету :)
Минимум, который хотелось бы получить на выходе.
mcBSCUNITADMIN STATE INTERFACEIP ADDRESSNBSC01BCXU-0 UPVLAN700NBSC01BCXU-1UPVLAN700NBSC01BCXU-2UPVLAN70010.42.128.73/28NBSC01BCXU-3UPVLAN70010.42.128.72/28---------------NBSC01BCXU-0 UPVLAN701NBSC01BCXU-1UPVLAN701NBSC01BCXU-2UPVLAN70110.42.128.89/28NBSC01BCXU-3UPVLAN70110.42.128.88/28---------------NBSC01ETME-0UPVLAN23NBSC01ETME-1UPVLAN2310.0.3.4/25NBSC01ETME-2UPVLAN2310.0.3.1/25NBSC01ETME-3UPVLAN2310.0.3.3/25NBSC01ETME-4UPVLAN2310.0.3.5/25
Спасибо.
...
Рейтинг: 0 / 0
16.02.2019, 12:47
    #39774865
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить не стандартный текстовый файл. Ответ оборудования через телнет.
Архимедофф,
для наглядности заменила пробелы на подчеркивание и убрала пустые строки
LOADING_PROGRAM_VERSION_27.96-0
mcBSC_____NBSC01_________________2019-02-16__10:50:55
INTERROGATING_NETWORK_INTERFACE_DATA
UNIT_________ADMIN_______ADDR
__INTERFACE__STATE_MTU___ATTR_____IP_ADDRESS
------_-----_-----_--_---------------
ETME-0_____________
__VLAN23_____UP____1500____________________
___->IFETH0____23___0/0____________________
ETME-1_____________
__VLAN23_____UP____1500__LI______(10.0.3.4/25)_________
____________________________________EEP_____________
___->IFETH0____23___0/0____________________
ETME-2_____________
__VLAN23_____UP____1500__LI______(10.0.3.1/25)_________
____________________________________EEP_____________
___->IFETH0____23___0/0____________________
ETME-3_____________
__VLAN23_____UP____1500__LI______(10.0.3.3/25)_________
____________________________________EEP_____________
___->IFETH0____23___0/0____________________
ETME-4_____________
__VLAN23_____UP____1500__LI______(10.0.3.5/25)_________
____________________________________EEP_____________
___->IFETH0____23___0/0____________________
COMMAND_EXECUTED

надо получить
SCUNITADMIN STATEINTERFACEIP ADDRESSNBSC01BCXU-0 UPVLAN700NBSC01BCXU-1UPVLAN700NBSC01BCXU-2UPVLAN70010.42.128.73/28NBSC01BCXU-3UPVLAN70010.42.128.72/28
...
Рейтинг: 0 / 0
16.02.2019, 16:50
    #39774922
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить не стандартный текстовый файл. Ответ оборудования через телнет.
Чего тут сложного?

Строки с фиксированной шириной полей.

1. Грузим строки в табличку целиком.
2. Пишем разбиралку для одной строки на VBA или запросом. Как умеешь.
...
Рейтинг: 0 / 0
16.02.2019, 17:37
    #39774939
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить не стандартный текстовый файл. Ответ оборудования через телнет.
aleks222Чего тут сложного?

Строки с фиксированной шириной полей.

1. Грузим строки в табличку целиком.
2. Пишем разбиралку для одной строки на VBA или запросом. Как умеешь.у него то, что должно попасть в одну таблицу результата - в 2-х последовательных строках файла
а значение для 1-го поля (mcBSC) так вообще, в "шапке" таблицы, один раз ...

Код: vbnet
1.
2.
3.
4.
mcBSC     NBSC01                 2019-02-16  10:50:55
...
BCXU-9             
  VLAN701    UP    1500  L        10.42.128.86/28                              

имхо, тут таблицы/запросы не помогут.
Тут тупо : "запрягся" и пошел парсить в VBA, построчно :)
...
Рейтинг: 0 / 0
16.02.2019, 17:44
    #39774944
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить не стандартный текстовый файл. Ответ оборудования через телнет.
courtaleks222Чего тут сложного?

Строки с фиксированной шириной полей.

1. Грузим строки в табличку целиком.
2. Пишем разбиралку для одной строки на VBA или запросом. Как умеешь.у него то, что должно попасть в одну таблицу строку результата - в 2-х последовательных строках файла
а значение для 1-го поля (mcBSC) так вообще, в "шапке" таблицы, один раз ...

Код: vbnet
1.
2.
3.
4.
mcBSC     NBSC01                 2019-02-16  10:50:55
...
BCXU-9             
  VLAN701    UP    1500  L        10.42.128.86/28                              


имхо, тут таблицы/запросы не помогут.
Тут тупо : "запрягся" и пошел парсить в VBA, построчно :)
...
Рейтинг: 0 / 0
16.02.2019, 17:54
    #39774947
Распарсить не стандартный текстовый файл. Ответ оборудования через телнет.
court,

Получается достать, двигаясь сверху вниз и загоняя нужные данне в переменные. Не уверен что код красивый, но тем не менее.
И да, чуть переделал свою хотелку сверху. Результат удовлетворяет. Советы на подточить код - принимаются :)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Dim f, FileTxt$
Dim NameBSC$, NameUnit$, NumUnit%, IPUnit$

f = FreeFile
'DoCmd.CloseTable "tbl_BRD"
strSQL = "delete * from tbl_BRD"
CurrentDb.Execute (strSQL)

Open PathFile For Input As f
Do While Not EOF(f)
    'FileTxt = Input(0, #f)   '  посимвольное чтение
    Line Input #f, FileTxt    '  построчное чтение
    If FileTxt Like "*mcBSC*" Then
      NameBSC = Split(FileTxt, "     ")(1)
    End If
    If FileTxt Like "BCXU-*" Or FileTxt Like "ETME-*" Then
      NameUnit = Trim(FileTxt)
      NumUnit = Split(NameUnit, "-")(1)
    End If
    On Error Resume Next
    If LTrim(FileTxt) Like "VLAN*" Then
        If LTrim(FileTxt) Like "VLAN7*" Then IPUnit = Split(FileTxt, "    ")(4)
        If LTrim(FileTxt) Like "VLAN2*" Then IPUnit = Replace(Replace(Trim(Split(FileTxt, "    ")(3)), ")", ""), "(", "")
        'Debug.Print "NameBSC:" & NameBSC & " NameUnit: " & NameUnit & "  NumUnit: " & NumUnit & "  IPUnit: " & IPUnit
        
        ' на данном шаге все собрали, будем добавлять в таблицу
        strSQL = "INSERT INTO tbl_BRD(NameBSC, NameUnit, NumUnit, IPUnit, TimeUpdate ) "
        strSQL = strSQL & " values('" & NameBSC & "','" & NameUnit & "','" & NumUnit & "','" & IPUnit & "',#" & Format(Date & " " & Time, "yyyy\/mm\/dd hh\:mm") & "#)"
        'Debug.Print strSQL
        CurrentDb.Execute (strSQL)
    End If
Loop
Close #f


...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Распарсить не стандартный текстовый файл. Ответ оборудования через телнет. / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]