Sigmond Gatt Ответов: 1

Генерация статистики для файла log4net?


привет,

У меня есть следующий файл журнала:

2018-03-20 16:28:09,333 INFO [1] Luhn_Check.ResultForm.btnexport_Click - guy1 : generated 50 transactions.
2018-03-20 16:29:09,333 INFO [1] Luhn_Check.ResultForm.btnexport_Click - guy2 : generated 50 transactions.
2018-03-20 16:30:09,333 INFO [1] Luhn_Check.ResultForm.btnexport_Click - guy3 : generated 50 transactions.
2018-03-20 16:31:09,333 INFO [1] Luhn_Check.ResultForm.btnexport_Click - guy1 : generated 50 transactions.
2018-03-20 16:31:10,333 INFO [1] Luhn_Check.ResultForm.btnexport_Click - guy1 : generated 50 transactions.



кто-то может помочь мне сгенерировать статистику, например:

месяц парень сделки
1 марта 150 г.
2 марта 50 лет
3 марта 50 лет

Что я уже пробовал:

Я искал в google, чтобы найти что-то, но безуспешно.

Mehdi Gholam

Кажется достаточно простым, где вы застряли?

Sigmond Gatt

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

Richard MacCutchan

Множество примеров C# по всему интернету: TextStream, String и т. д.

1 Ответов

Рейтинг:
4

Christiaan van Bergen

Привет,

Давным - давно я писал: Преобразование-текстовых-файлов-CSV-в-DataTable Не многие из нас все еще используют их больше, но время от времени я нахожу случаи, когда они все еще были бы применимы. Вы можете использовать приведенный ниже код в качестве консольного приложения и использовать его в своих файлах журналов. Используемое регулярное выражение адаптировано к вашему образцу, и выход таков, как вам, вероятно, нужно.

ХТ христиан

using System;
using System.Linq;
using System.Data;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;

/// <summary>
/// Example of using the TextFileDataSet to read the contents of a log file
/// and aggregate some values.
/// You can get the TextFileDataSet at https://github.com/cvanbergen/TextFileDataSet 
/// and read more about it at https://www.codeproject.com/Articles/22400/Converting-text-files-CSV-to-DataTable
/// </summary>
class Program
{
    static void Main(string[] args)
    {
        // Create an instance of MyTextFileDataSet
        // You can get the TextFileDataSet at https://github.com/cvanbergen/TextFileDataSet            
        var MyTextFileDataSet = new TextFileDataSet.TextFileDataSet();

        // open the file, in this case I assume that the name is Logfile.txt and it is in the 
        // same folder as where this executes
        using (var fileStream = new FileStream("Logfile.txt", FileMode.Open, FileAccess.Read))
        {
            // specify the regular expression for validating and recognising columns
            // this expression is already tailored for your log file sample
            MyTextFileDataSet.ContentExpression = new Regex(@"^(?<date>[^ ]+).+INFO \[1\] Luhn_Check.ResultForm.btnexport_Click -(?<name>[^:]+): generated (?<transactions>[0-9]+) transactions.$", RegexOptions.Multiline);
            // fill the dataset
            MyTextFileDataSet.Fill(fileStream);
        }

        // Create a collection of LogItems that we can later on show
        var logItems = new List<LogItem>();

        // Get all the rows from the first table in the dataset
        var rows = MyTextFileDataSet.Tables[0].AsEnumerable();
        // Iterate over all the rows and create a LogItem entry or 
        // update the 'Transactions' amount
        foreach (var row in rows)
        {
            var date = DateTime.Parse(row.Field<string>("date"));
            var name = row.Field<string>("name").Trim();
            var transactions = int.Parse(row.Field<string>("transactions"));

            var logItem = logItems
                                .Where(n => n.Date == date)
                                .Where(n => n.Name == name)
                                .FirstOrDefault();
            if (logItem == null)
            {
                logItems.Add(new LogItem
                {
                    Date = date,
                    Name = name,
                    Transactions = transactions
                });
            }
            else
            {
                logItem.Transactions += transactions;
            }
        }

        // Now output your LogItems.
        // Hey, it is a collection, you can sort it any way you like 
        logItems
            .OrderBy(n => n.Date)
            .ThenBy(n => n.Name)
            .ToList()
            .ForEach(n =>
                Console.WriteLine($"{n.Date} {n.Name} {n.Transactions}"));

        // Just keep the console window open ;-)
        Console.Read();
    }

}

/// <summary>
/// A simple class for your LogItem
/// </summary>
class LogItem
{
    public DateTime Date { get; set; }
    public string Name { get; set; }
    public int Transactions { get; set; }
}


Sigmond Gatt

спасибо я так и сделаю :)