解析PostgreSQL CSV日志

时间:2012-03-22 06:47:21

标签: c# postgresql

我正在处理需要解析PostgreSql服务器生成的CSV日志的应用程序部分。

  • 日志存储在C:\ Program Files \ PostgreSQL \ 9.0 \ data \ pg_log

  • 9.0.4中的服务器版本

  • 该应用程序是在C Sharp开发的

    • 解析Log之后的基本实用程序是在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 from stock_apals order by pdate,id”,,,,,,,,“exec_simple_query,。\ src \ backend \ tcop \ postgres.c:900" , “”

正如您所看到的,Log中的列以逗号分隔,但不过是单个值 不是报价封闭。

例如第1,第4,第6列......

是否有可以查找格式错误的列并放置引号的实用程序或正则表达式

这特别是在性能方面,因为这些日志非常长 几乎每小时都有新的

我只是想更新列并使用FastCSVReader来解析它。

感谢您的任何建议和帮助

1 个答案:

答案 0 :(得分:1)

我已经更新了我的csv解析器,因此它现在能够解析数据(至少在示例中提供)。下面是exampe控制台应用程序,它解析保存在multiline_quotes.txt文件中的数据。可以找到项目源here(您可以下载ZIP)。您需要Gorgon.ParsingGorgon.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");
        }
    }
}
相关问题