Написать парсер лог-файла c#

Цена договорная
04 декабря 2020, 13:35 • 3 отклика • 38 просмотров
Нужно написать парсер лог файла на с# и сохранить извлеченную информацию в формате csv. Фрагмент лога

[12:23:35:545 ] New message received.
[12:23:35:546 ] Received a type 'D' package with a length of 578 bytes with offset 0.
[12:23:35:546 ] Pass D message to the reader.
[12:23:35:546 ] Reading message. Details: 7207, package length: 25, frame number: 176811, frame size: 5000.
[12:23:35:546 ] Start reading time model. 1 models detected
[12:23:35:546 ] Completed reading time model
[12:23:35:546 ] Start reading tag model. 6 models detected
[12:23:35:546 ] Completed reading tag model
[12:23:35:546 ] Package D was read and added to results.
[12:23:35:546 ] Enqueued new message 'HorseRaces.Poc.Contracts.Communication.Models.ReadResult' to the queue
[12:23:35:546 ] Package D pushed to the queue
[12:23:35:564 ] 23:35:564 Start mapping packet.
[12:23:35:564 ] 23:35:564 Mapping completed.
[12:23:35:564 ] Data after mapping and before validation
[12:23:35:564 ] 2529 X 55453 Y 2489 Time=09:23:35
[12:23:35:564 ] 2662 X 55489 Y 2567 Time=09:23:35
[12:23:35:564 ] 2671 X 55433 Y 2624 Time=09:23:35
[12:23:35:564 ] 2675 X 55469 Y 2341 Time=09:23:35
[12:23:35:565 ] 2689 X 55443 Y 2644 Time=09:23:35
[12:23:35:565 ] 2660 X 55480 Y 2422 Time=09:23:35
[12:23:35:565 ] Data before coordinates normalization
[12:23:35:565 ] 2529 X 55453 Y 2489 Time=09:23:35
[12:23:35:565 ] 2662 X 55489 Y 2567 Time=09:23:35
[12:23:35:565 ] 2671 X 55433 Y 2624 Time=09:23:35
[12:23:35:565 ] 2675 X 55469 Y 2341 Time=09:23:35
[12:23:35:565 ] 2689 X 55443 Y 2644 Time=09:23:35
[12:23:35:565 ] 2660 X 55480 Y 2422 Time=09:23:35
[12:23:35:566 ] Data after coordinates normalization
[12:23:35:566 ] 2529 X 27 Y 485 Time=09:23:35
[12:23:35:566 ] 2662 X -9 Y 563 Time=09:23:35
[12:23:35:566 ] 2671 X 47 Y 620 Time=09:23:35
[12:23:35:566 ] 2675 X 11 Y 337 Time=09:23:35
[12:23:35:566 ] 2689 X 37 Y 640 Time=09:23:35
[12:23:35:566 ] 2660 X 0 Y 418 Time=09:23:35
[12:23:35:570 ] Start Calculation. Elapsed time: 00:00:00.1000000
[12:23:35:571 ] Horse ID: 2671
[12:23:35:571 ] Step distance: 0
[12:23:35:571 ] Step duration: 100
[12:23:35:571 ] Track distance: 0.47
[12:23:35:571 ] Real distance: 0
[12:23:35:571 ] Instant speed: 0
[12:23:35:571 ] Distance to X Axis: 6.2
[12:23:35:573 ] Horse ID: 2675
[12:23:35:573 ] Step distance: 0
[12:23:35:573 ] Step duration: 100
[12:23:35:573 ] Track distance: 0.11
[12:23:35:573 ] Real distance: 0
[12:23:35:573 ] Instant speed: 0
[12:23:35:573 ] Distance to X Axis: 3.37

В одном сообщении приходит информация о нескольких лошадях. В данном случае, их 6 (кол-во может быть другим для других лог файлов). Для этого сообщения нужно вывести 6 строк в csv файл.

Строка в результирующем файле должна содержать следующие столбцы
Time when message received,
Frame number,
Horse ID
X after mapping
Y after mapping
X after normalization
Y after normalization
Step distance
Step duration
Instant speed
Avg speed (нужно расчитать - средняя скорость за последние 30 сообщений)

В некоторых сообщениях может не быть данных и тогда для них лог выглядит так
[12:24:14:674 ] New message received.
[12:24:14:674 ] Received a type 'D' package with a length of 468 bytes with offset 0.
[12:24:14:674 ] Pass D message to the reader.
[12:24:14:674 ] Reading message. Details: 7989, package length: 25, frame number: 177593, frame size: 5000.
[12:24:14:674 ] Start reading time model. 1 models detected
[12:24:14:674 ] Completed reading time model
[12:24:14:674 ] Start reading tag model. 6 models detected
[12:24:14:674 ] Completed reading tag model
[12:24:14:674 ] Package D was read and added to results.
[12:24:14:674 ] Enqueued new message 'HorseRaces.Poc.Contracts.Communication.Models.ReadResult' to the queue
[12:24:14:674 ] Package D pushed to the queue
[12:24:14:674 ] 24:14:674 Ignore received data HorseRaces.Poc.Communication.Data.Models.DataModel. Race is not in progress.

Иногда может приходить несколько склеенных сообщений в одном, тогда лог выглядит так
[12:23:35:515 ] New message received.
...
[12:23:35:516 ] Reading message. Details: 7205, package length: 25, frame number: 176809, frame size: 5000.
...
[12:23:35:516 ] Reading message. Details: 7206, package length: 25, frame number: 176810, frame size: 5000.

Иногда новое сообщение может приходить раньше, чем обработано предыдущее, но обрабатываются они все равно строго по очереди.

По срокам - в идеале, до утра понедельника 12-00 мск. Пишите свою цену.
Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Заказчик
Очень доволен сотрудничеством с Владимиром. Работы выполнена раньше срока с хорошим качеством. Код написан адекватно и хорошо откомментирован. Все замечания были очень быстро исправлены.
~ 1 год назад
Отличный заказчик, на все вопросы подробно ответил, с примерами, отвечал каждый раз в течении 5-10 минут. Рекомендую!
~ 1 год назад