Разбор PostgreSQL CSV Log - PullRequest
       4

Разбор PostgreSQL CSV Log

0 голосов
/ 22 марта 2012

Я работаю над разделом приложения, которому необходимо проанализировать журналы CSV, сгенерированные сервером PostgreSql.

  • Сохраняются журналы C: \ Program Files \ PostgreSQL \ 9.0 \ data \ pg_log

  • Версия сервера в 9.0.4

  • Приложение разработано на C Sharp

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

Однако основная проблема в том, что формат журнала не читается

Впервые он был протестирован с A Fast CSV Reader

Затем мы создали специальную утилиту, используя метод String.Split с обычным циклом Foreach, проходящим через массив

Строка данных журнала образцов

2012-03-21 11: 59: 20.640 IST, "postgres", "stock_apals", 3276, "localhost: 1639", 4f697540.ccc, 10, "idle", 2012-03-21 11:59: 20 IST, 2 / 163,0, LOG, 00000, "оператор: SELECT id, pdate, itemname, qty из заказа stock_apals по pdate, id" ,,,,,,,, "exec_simple_query,. \ Src \ backend \ tcop \ postgres.c: 900" , ""

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

Например, 1-й, 4-й, 6-й .. столбцы

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

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

Я просто хочу обновить столбцы и использовать FastCSVReader для его анализа.

Спасибо за любые советы и помощь

1 Ответ

1 голос
/ 23 марта 2012

Я обновил свой парсер csv, так что теперь он может анализировать ваши данные (по крайней мере, в примере).Ниже представлено консольное приложение exampe, которое анализирует ваши данные, сохраненные в файле multiline_quotes.txt.Источник проекта можно найти здесь (вы можете скачать ZIP ).Вам нужно либо Gorgon.Parsing, либо Gorgon.Parsing.Net35 (в случае, если вы не можете использовать .NET 4.0).

На самом деле я смог добиться того же результата, используя Fast CSV Reader .Вы просто использовали это как-то неправильно.

namespace So9817628
{
    using System.Data;
    using System.Text;
    using Gorgon.Parsing.Csv;

    class Program
    {
        static void Main(string[] args)
        {
            // prepare
            CsvParserSettings s = new CsvParserSettings();
            s.CodePage = Encoding.Default;
            s.ContainsHeader = false;
            s.SplitString = ",";
            s.EscapeString = "\"\"";
            s.ContainsQuotes = true;
            s.ContainsMultilineValues = true;
            // uncomment below if you don't want escape quotes ("") to be replaced with single quote
            //s.ReplaceEscapeString = false;

            CsvParser parser = new CsvParser(s);

            DataTable dt = parser.ParseToDataTableSequential("multiline_quotes.txt");

            dt.WriteXml("parsed.xml");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...