2012-03-22 78 views
0

我正在开发一个应用程序,它需要解析由PostgreSql服务器生成的CSV日志。解析PostgreSQL CSV日志

  • 日志存储C:\ Program Files文件\的PostgreSQL \ 9.0 \ DATA \ pg_log

  • 在9.0.4

  • 服务器版本的应用程序是用C夏普

    开发
    • 解析日志之后的基本工具是显示DataGridView中的内容。
    • 还有其他过滤器选项,例如查看特定日期时间范围内的日志内容。

然而这是主要的问题,日志格式不是可读

它首先用一种快速CSV阅读

然后,我们使用由方法String.Split与通常Foreach循环经历的阵列

示例日志数据线的自定义效用

2012-03-21 11:59:20.640 IST,“postgres”,“stock_apals”,3276,“localhost:1639”,4f697540.ccc,10,“空闲”,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”, “”

正如您所见,日志中的列以逗号分隔,但是单个值 不是Quote Enclosed。

例如第一,4rth,6 ..列

是否有一个工具,或者可以找到畸形列和地方正则表达式行情

这尤其是对于服务表现,监守这些日志非常长,并且 新的几乎每小时都会生成

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

感谢您的任何建议和帮助

+0

不FastCSVReader支持混合引用/未引用的值吗? – 2012-03-22 07:02:05

+0

发生错误的是它到达sql语句所在的列。它也为表格列设置了逗号。日志行是一个包含引号和非引号的列的混合串。是否有一个正则表达式或实用工具可以在CSVReader页面上将非引用列转换为引用列 – arvind 2012-03-22 09:09:27

+0

它突出显示“该阅读器支持跨越多行的字段,唯一的限制是必须引用它们,否则将无法区分在格式不正确的数据和多行值之间。“ – arvind 2012-03-22 09:12:55

回答

1

我已经更新了我的CSV解析器,所以它现在能够为您解析数据(例如,在至少提供)。下面是正在解析保存在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"); 
     } 
    } 
} 
+0

非常感谢,我已经在样本上进行了测试,并将其转发给完整的应用程序测试。 – arvind 2012-03-23 13:57:22