2012-03-22 136 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