Синтаксический анализ журнала с использованием чего-то другого, кроме разделения строки c # - PullRequest
1 голос
/ 03 февраля 2012

Я почти уверен, что об этом спрашивали раньше, но я не смог найти ничего хорошего. я пытаюсь разобрать журнал, но у меня проблемы с ним.

сначала это выглядело довольно просто, потому что журнал построен так: вещь, предмет, вещь, вещь так что я строки разбить его на,

как бы то ни было, в самом значении возможно появление а. и здесь я не знал, что делать дальше. Как бы я успешно проанализировать этот вид журнала?

Ура, Kage

Редактировать ~~ Вот пример журнала:

1326139200953, info ,, 0, "значение str, которое может содержать" ,,, 0

1326139201109, info ,, 0, "значение str, которое может содержать" ,,, 0

1326139201265, info ,, 0, "значение str, которое может содержать" ,,, 0

1326139201999, начало ,, 0 ,,,, 0

1326139368296, новый, F: \ Dir \ Dir \ file.txt, 1536,, 0,, ​​0

1 Ответ

2 голосов
/ 03 февраля 2012

Если в вашем файле журнала нет инкапсуляторов полей, поля имеют переменную ширину, и разделитель / разделитель также может появляться в поле, то, скорее всего, вы не сможете запрограммировать что-то, что будет работать во всех случаях.

Можете ли вы привести пример данных вашего файла журнала? Может быть возможно сопоставить нужные вам части с регулярным выражением.

К сожалению, я думаю, что ваш вопрос не отвечает в текущем состоянии, пожалуйста, предоставьте больше информации.

Редактировать: Спасибо за обновление вопроса, у вас есть полевые инкапсуляторы (двойные кавычки). Это облегчит!

Я думаю, что есть много способов сделать это. Лично я думаю, что продолжу разбивать на запятые, но затем перебрать получившийся массив, проверив, является ли первый символ любого значения двойной кавычкой. Если это так, то вам нужно присоединить его к элементу массива после него. Если последний символ элемента объединенного массива не является двойной кавычкой, вам нужно продолжать присоединение, пока вы не закроете свою двойную кавычку.

Конечно, есть лучший способ, так что вы можете дождаться другого решения.

Редактировать 2: Попробуй и дай мне знать, как ты поживаешь:

string myRegex = @"(?<=^(?:[^""]*""[^""]*"")*[^""]*),";
string[] outputArray = Regex.Split(myStr, myRegex);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...