Разобрать файл журнала с пробелами

Я пытаюсь разобрать logfile (текстовый файл, сохраненный как файл *.log) в Visual Basic 2013 Express 'DataGridView. Файл журнала использует пробелы в качестве разделителя, но часть журнала сообщений содержит пробелы. Вот структура лог-файла:

Дата Идентификатор времени Соединение Тип_сообщения (команда/ответ/статус/и т. д.) Сообщение (может включать несколько пробелов (не одинаковое количество пробелов в сообщении))

Каждая запись журнала представляет собой отдельную строку в файле.

EDIT: Вот пример файла журнала:

2014-02-03 15:35:29 9900 3 Status: Listing directory [[server folder]]
2014-02-03 15:35:46 9900 3 Status: Invalid character sequence received, disabling UTF-8. Select UTF-8 option in site manager to force UTF-8.
2014-02-03 15:35:46 9900 3 Status: Calculating timezone offset of server...
2014-02-03 15:35:46 9900 3 Command: mtime "[[file name]]"
2014-02-03 15:35:46 9900 3 Response: 1382557913
2014-02-03 15:35:46 9900 3 Status: Timezone offsets: Server: -14400 seconds. Local: -18000 seconds. Difference: -3600 seconds.
2014-02-03 15:36:18 9900 2 Status: Connected to [[server name]]
2014-02-03 15:36:18 9900 1 Status: Starting upload of [[local folder name/file name (includes 3 spaces)]]
2014-02-03 15:36:18 9900 1 Command: cd "[[server folder]]"
2014-02-03 15:36:18 9900 2 Status: Starting upload of [[local folder name/file name (includes 3 spaces)]]
2014-02-03 15:36:18 9900 1 Response: New directory is: "[[server folder]]"
2014-02-03 15:36:18 9900 1 Command: put "[[local folder name/file name (includes 2 spaces)]]"
2014-02-03 15:36:18 9900 2 Command: cd "[[server folder]]"
2014-02-03 15:36:18 9900 1 Status: local: [[local folder name/file name (includes 3 spaces)]]=> remote:[[server folder]]

person CampSoup1988    schedule 05.02.2014    source источник
comment
Просто игнорируйте пробелы между скобками   -  person Arthur Rey    schedule 05.02.2014
comment
Помимо пробела в качестве разделителя, каков формат вашего файла журнала? В качестве примера приведите несколько строк.   -  person Neolisk    schedule 05.02.2014
comment
@Neolisk Я только что отредактировал свой вопрос со ссылкой на пример моих файлов журнала.   -  person CampSoup1988    schedule 05.02.2014
comment
Всегда старайтесь включать в вопрос всю необходимую информацию без внешних ссылок. Смотрите мою правку. Кроме этого - проверьте мой ответ - я думаю, это то, что вам нужно.   -  person Neolisk    schedule 05.02.2014
comment
@Neolisk Извините, я не думал, что журналы могут публиковаться так хорошо, как для вас, или я бы сделал это.   -  person CampSoup1988    schedule 05.02.2014


Ответы (1)


Это может быть некрасиво, но это работает:

Dim line As String = "2014-02-03 15:35:29 9900 3 Status: Listing directory [[server folder]]"
Dim split As String() = line.Split(" "c)
Dim message As String = String.Join(" "c, split.Skip(5).ToArray)

Предполагается, что у вас всего 6 столбцов, а последний — ваше сообщение.

EDIT: Как предложил @Andrew Morton, разделение можно переписать (без LINQ):

Dim split As String() = line.Split({" "c}, 6, StringSplitOptions.None)
person Neolisk    schedule 05.02.2014
comment
Или Dim parts = line.Split(" ".ToCharArray(), 5, StringSplitOptions.None) с помощью одного из String.Split перегружает. - person Andrew Morton; 05.02.2014
comment
Это правильно, я планирую иметь только 6 столбцов. Попробую ваш скрипт. - person CampSoup1988; 05.02.2014
comment
@AndrewMorton: изначально я искал эту перегрузку, но VS не предложил мне ее, поэтому я подумал, что, возможно, вспомнил что-то не так. Спасибо за упоминание - включено в РЕДАКТИРОВАТЬ. - person Neolisk; 05.02.2014
comment
@AndrewMorton Просматривая сценарий, который я уже использовал, я обнаружил, что у меня уже были почти те же атрибуты в разделении, за исключением числа (которое равно 6, а не 5) For Each col As String In txtlines(rows).Split({delimiter}, 6, StringSplitOptions.None) - person CampSoup1988; 05.02.2014
comment
@CampSoup1988: Вот почему вы всегда должны указывать исходный код в своем вопросе. 5 или 6 зависит от того, хотите ли вы сохранить тип сообщения как часть самого сообщения. - person Neolisk; 05.02.2014