我正在处理需要解析PostgreSql服务器生成的CSV日志的应用程序部分。
日志存储在C:\ Program Files \ PostgreSQL \ 9.0 \ data \ pg_log
9.0.4中的服务器版本
该应用程序是在C Sharp开发的
但主要问题是,日志格式无法读取
首次使用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来解析它。
感谢您的任何建议和帮助
答案 0 :(得分:1)
我已经更新了我的csv解析器,因此它现在能够解析数据(至少在示例中提供)。下面是exampe控制台应用程序,它解析保存在multiline_quotes.txt
文件中的数据。可以找到项目源here(您可以下载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");
}
}
}