Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Парсер тексовых логов / 6 сообщений из 6, страница 1 из 1
24.07.2014, 12:29
    #38704749
GutenMorgan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер тексовых логов
Помогите, пожалуйста, сделать парсер текстовых логов (*.txt) для Access.
Вид логов:
=========
User: Ivanov
IP: 192.168.111.12
=========
<date> 12.07.2014 </date>
12.07.2014 18:50:01 : Запуск копирования
12.07.2014 18:59:10 : Завершение копирования

=========
User: Petrov
IP: 192.168.111.10
=========
<date> 12.07.2014 </date>
12.07.2014 10:01:32 : Запуск копирования
12.07.2014 11:12:07 : Завершение копирования

На выходе должны получить таблицу:

User IP SessionDate CopyTime DescriptionIvanov 192.168.111.1212.07.201412.07.2014 18:50:01Запуск копированияIvanov 192.168.111.1212.07.201412.07.2014 18:59:10Завершение копированияPetrov 192.168.111.1012.07.201412.07.2014 10:01:32Запуск копированияPetrov 192.168.111.1012.07.201412.07.2014 11:12:07Завершение копирования

Заранее спасибо за любую помощь.
...
Рейтинг: 0 / 0
24.07.2014, 16:18
    #38705164
Парсер тексовых логов
GutenMorgan, стандартных способов нет. Файл нужно читать построчно (или целиком) средствами VBA (или FSO.TextStream, или ADODB.Stream), анализировать каждую строку, вычленять требуемые данные и добавлять записи в Recordset, открытый на таблице-получателе.
Вот пример процедуры для вашего случая:
Код: 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.
Sub DeribanLog()
Const sPath = "C:\Temp\Log.txt"
Dim i&, j&, s$, v, v1
'Файл открывается на чтение, считывается всё содержимое, файл закрывается.
    i = FreeFile: Open sPath For Input As i: s = Input(LOF(i), i): Close i
'Текст преобразуется в массив строк (вместо vbCrLf может быть vbCr или vbLf).
    v = Split(s, vbCrLf)
 
Dim arr(0 To 4)
 For i = LBound(v) To UBound(v)
    s = v(i)
  If s Like "User:*" Then
    Erase arr
    arr(0) = Mid$(s, 7)
  ElseIf s Like "IP:*" Then
    arr(1) = Mid$(s, 5)
  ElseIf s Like "<date>*" Then
    arr(2) = Mid$(s, 8, 10)
    For j = 1 To 2
        i = i + 1
        s = v(i)
        arr(3) = Left$(s, 19)
        arr(4) = Mid$(s, 23)
Debug.Print arr(0); Tab; arr(1); Tab; arr(2); Tab; arr(3); Tab; arr(4)
    Next j
  End If
 Next i
End Sub


Строка с Debug.Print выводит результаты в окно отладки. Вместо нее надо выполнить добавление записи в Recordset.
...
Рейтинг: 0 / 0
24.07.2014, 16:19
    #38705166
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер тексовых логов
GutenMorgan,
Открываешь лог на чтение, читаешь построчно, анализируешь каждую строку и пишешь соответствующие данные в таблицу.
Примеров на чтение бесконечное множество. Анализ - не сложный:

"=========" готовишься читать первую строчку с "User"
если сейчас приходит строчка, начинающаяся на "User", парсишь ее и пишешь новую строку в рекордсет или готовишь новый инсерт.
Если приходит строка не содержащая "User" в первых символах - решаешь сам что делать.
Если все нормально ждешь в след строке IP. Пришло IP, парсишь строку и пишешь в рекордсет или готовишь строку для инсерта
ну и так далее
...
Рейтинг: 0 / 0
25.07.2014, 09:50
    #38705631
GutenMorgan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер тексовых логов
Анатолий ( Киев ),
Большое спасибо! Работает как надо, только в массиве с описанием arr(4) сбивается кодировка; в окне дебага и после вставки видны абракадабры:
Завершение копирования

Не подскажете, как это можно исправить? Исходный файл в Windows-1251
...
Рейтинг: 0 / 0
25.07.2014, 11:49
    #38705759
Парсер тексовых логов
GutenMorganв массиве с описанием arr(4) сбивается кодировка; в окне дебага и после вставки видны абракадабры:
Завершение копирования А в строке до занесения в массив? Или в считанном из файла тексте?
GutenMorganИсходный файл в Windows-1251 Вы уверены? Если файл открывать в Ворде, какую кодировку предлагает?
Или отткрыть в блокноте, а затем "Сохранить как" - какая кодировка высвечивается?
Может файл выложите?
...
Рейтинг: 0 / 0
28.07.2014, 13:11
    #38707219
GutenMorgan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер тексовых логов
Анатолий ( Киев ),

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


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