Извлечение нужных данных регулярным выражениям и добавление в ListView - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Имеется текстовый файл. И этот текстовый файл постоянно заполняется вообщем. В текстовом файле текст таково шаблона
L 02/10/2016 - 01:54:09: Log file started (file "valve/addons/amxmodx/configs/PlayerLogs.txt") (game "valve") (amx "1.8.2") L 02/10/2016 - 01:54:09: NICK: man 36 VRN IP: 107.105.144.13 STEAMID: STEAM_0:0:235854415 MAP: 2000_2_no_mortal L 02/10/2016 - 01:54:09: NICK: Sido Ocytocine IP: 61.200.102.151 STEAMID: STEAM_ID_LAN MAP: 2000_2_no_mortal L 02/10/2016 - 01:54:09: NICK: Pro100>kapocta IP: 91.222.50.9 STEAMID: STEAM_0:0:2359701861 MAP: 2000_2_no_mortal L 02/10/2016 - 01:54:09: NICK: Android IP: 88.115.80.21 STEAMID: STEAM_0:0:564012456 MAP: 2000_2_no_mortal L 02/10/2016 - 02:02:36: NICK: 4iter IP: 89.19.113.245 STEAMID: STEAM_0:0:521548501 MAP: 2000_2_no_mortal L 02/10/2016 - 02:54:01: NICK: Olegator IP: 128.54.14.38 STEAMID: STEAM_0:0:1351278428 MAP: 2000_2_no_mortal L 02/10/2016 - 13:50:12: NICK: Sav (Pension Power!!) IP: 85.25.75.72 STEAMID: STEAM_0:1:3254598 MAP: 2000_2_no_mortal
Цель: Помогите выдернуть NICK, IP, STEAMID, MAP и заполнить их в ListView типа такой таблицы: | NICK | IP | STEAMID | MAP | man 36 VRN 107.105.144.13 STEAM_0:0:235854415 2000_2_no_mortal Sido Ocytocine 61.200.102.151 STEAM_ID_LAN 2000_2_no_mortal Pro100>kapocta 91.222.50.9 STEAM_0:0:2359701861 2000_2_no_mortal ....... и тд... PS: Вот эта строка
L 02/10/2016 - 01:54:09: Log file started (file "valve/addons/amxmodx/configs/PlayerLogs.txt") (game "valve") (amx "1.8.2")
записывается в начале файла. Он записывается один раз на самой первой строчке... а дальше запись введется по однотипному шаблону

Решение задачи: «Извлечение нужных данных регулярным выражениям и добавление в ListView»

textual
Листинг программы
using System;
using System.Linq;
using System.Text.RegularExpressions;
 
public class Program
{
    public static void Main(string[] args)
    {
        var lines = new string[]
        {
            "L02/10/2016 - 01:54:09: Log file started (file "valve/addons/amxmodx/configs/PlayerLogs.txt") (game "valve") (amx"1.8.2")",
    "L 02/10/2016 - 01:54:09: NICK: man 36 VRN  IP: 107.105.144.13  STEAMID: STEAM_0:0:235854415    MAP: 2000_2_no_mortal",
    "L 02/10/2016 - 01:54:09: NICK: Sido Ocytocine  IP: 61.200.102.151  STEAMID: STEAM_ID_LAN   MAP: 2000_2_no_mortal",
    "L 02/10/2016 - 01:54:09: NICK: Pro100>kapocta  IP: 91.222.50.9 STEAMID: STEAM_0:0:2359701861   MAP: 2000_2_no_mortal",
    "L 02/10/2016 - 01:54:09: NICK: Android IP: 88.115.80.21    STEAMID: STEAM_0:0:564012456    MAP: 2000_2_no_mortal",
    "L 02/10/2016 - 02:02:36: NICK: 4iter   IP: 89.19.113.245   STEAMID: STEAM_0:0:521548501    MAP: 2000_2_no_mortal",
    "L 02/10/2016 - 02:54:01: NICK: Olegator    IP: 128.54.14.38    STEAMID: STEAM_0:0:1351278428   MAP: 2000_2_no_mortal",
    "L 02/10/2016 - 13:50:12: NICK: Sav (Pension Power!!)   IP: 85.25.75.72 STEAMID: STEAM_0:1:3254598  MAP: 2000_2_no_mortal"
        };
 
        var nickReg = new Regex(@"(?<=NICK: ).*(?=\sIP:)");
        var ipReg = new Regex(@"(?<=IP: ).*(?=\sSTEAMID:)");
        var steamReg = new Regex(@"(?<=STEAMID: ).*(?=\sMAP:)");
        var mapReg = new Regex(@"(?<=MAP: ).*$");
 
        var rows = from line in lines
            let nick = nickReg.Match(line)
            let ip = ipReg.Match(line)
            let steam = steamReg.Match(line)
            let map = mapReg.Match(line)
            where nick.Success && ip.Success && steam.Success && map.Success
            select new {nick, ip, steam, map};
 
        foreach (var row in rows)
        {
            Console.WriteLine("{0}\t{1}\t{2}]\t{3}", row.nick, row.ip, row.steam, row.map);
        }
    }
}

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы