Разделение строки файла журнала c # - PullRequest
0 голосов
/ 27 октября 2018

Строки файла журнала в вопросе:

[2018-10-25 19:40:34] [Output] : (CHAT-Type) User: message

Таким образом, дата и выходные данные могут быть разделены на количество символов, верно?

Тогда я могу разобрать дату из [].

Это оставило бы меня с

(CHAT-Type) User: message

Теперь я хочу разделить это на Тип чата, Имя пользователя и сообщение.

Это действительно больно мне в голову, как я сделал бы все это в C #.

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

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Вот как вы разделяете все значения:

string inputValue = "(CHAT-Type) User: message";

            int braceCloseIndex = inputValue.IndexOf(')');
            int colonIndex = inputValue.IndexOf(':');

            string chatType = inputValue.Substring(1, braceCloseIndex - 1).Trim();
            string userName = inputValue.Substring(braceCloseIndex + 1, colonIndex - braceCloseIndex - 1).Trim();
            string message = inputValue.Substring(colonIndex + 1).Trim();

            Console.WriteLine($"chatType: {chatType}, userName: {userName}, msg: {message}");
0 голосов
/ 27 октября 2018

Это похоже на проблему RegEx:)

Вот регулярное выражение, которое соответствует одной строке (с именованными группами захвата)

^\[(?'dateTime'.+)\] \[(?'output'.+)\] : \((?'type'.+)\) (?'user'.+): (?'message'.+)$

Ссылка на Regexr для онлайн-тестирования : https://regexr.com/421p4

Поскольку я использовал .+ для всех областей, ограничений для символов нет. Он может сломаться (например, если до и после : нет места). Но его можно еще улучшить, чтобы сделать его более гибким. Если хотите, я могу написать один.

Кроме того, если вы используете метод, подобный file.ReadAllText(), вам нужно использовать многострочный флаг, чтобы соответствовать всем строкам. (Regex.Match(input, pattern, RegexOptions.Multiline))

В противном случае (например, если вы перебираете строки), это не имеет значения, потому что в строке нет \n.

код C #

using System.Text.RegularExpressions;
// ...

string pattern = @"^\[(?<dateTime>.+)\] \[(?<output>.+)\] : \((?<type>.+)\) (?<user>.+): (?<message>.+)$";
string message = "[2018-10-25 19:40:34] [Output] : (CHAT-Type) User: message";

var match = Regex.Match(message, pattern);

Вы можете получить доступ к совпадениям через переменную match, например:

match.Groups["dateTime"].Value; // "2018-10-25 19:40:34"
match.Groups["user"].Value; // "User"
match.Groups["message"].Value; // "message"
...