使用c#将数据不一致的日志文件解析为XML结构
parse logfile with inconsistent data to XML structure using c#
使用 this 很棒的教程。
这是一个简单的示例,其中包含大量填充的日志文件,如下所示:
25/05/2002 21:49 Search Dozer Anita1
25/05/2002 21:51 Update Dozer Anita1
26/05/2002 11:02 Search Manda Gerry2k
26/05/2002 11:12 Update Manda Gerry2k
27/05/2002 15:34 Search Anka Anita1
12/08/2002 10:14 Search Amber Huarez
我有不一致的日志文件,例如:
25/05/2002 21:49 Search Dozer Anita1
25/05/2002 21:51 Update Anita1
26/05/2002 Search Manda Gerry2k
26/05/2002 11:12 Update Manda
27/05/2002 15:34 Anka Anita1
10:14 Search Amber Huarez
如果某些字段为空,我该怎么做才能防止出现异常?
这是一个代码
xmlFile.Formatting = Formatting.Indented;
xmlFile.WriteStartDocument();
xmlFile.WriteStartElement("lines");
while ((line = reader.ReadLine()) != null)
{
if (line.Contains("\t"))
{
string[] items = line.Split('\t');
xmlFile.WriteStartElement("line");
xmlFile.WriteElementString("id",items[0]);
xmlFile.WriteElementString("mandant", items[1]);
xmlFile.WriteElementString("datetime", items[2]);
xmlFile.WriteElementString("t_m", items[3]);
xmlFile.WriteElementString("user", items[4]);
xmlFile.WriteElementString("action", items[5]);
xmlFile.WriteElementString("info", items[6]);
xmlFile.WriteEndElement();
}
}
xmlFile.WriteEndDocument();
xmlFile.Close();
我认为只有当最后一项丢失时才会出现此问题,
因为中间缺少的项目在末尾仍然会有一个制表符分隔符。
在这种情况下,您可能应该使用内联条件来检查是否存在值:
xmlFile.WriteElementString("id", (items.Length > 0 ? items[0] : ""));
xmlFile.WriteElementString("mandant", (items.Length > 1 ? items[1] : ""));
xmlFile.WriteElementString("datetime", (items.Length > 2 ? items[2] : ""));
xmlFile.WriteElementString("t_m", (items.Length > 3 ? items[3] : ""));
xmlFile.WriteElementString("user", (items.Length > 4 ? items[4] : ""));
xmlFile.WriteElementString("action", (items.Length > 5 ? items[5] : ""));
xmlFile.WriteElementString("info", (items.Length > 6 ? items[6] : ""));
因此,这将为您提供超出记录末尾的槽中的默认空字符串。
使用 this 很棒的教程。
这是一个简单的示例,其中包含大量填充的日志文件,如下所示:
25/05/2002 21:49 Search Dozer Anita1
25/05/2002 21:51 Update Dozer Anita1
26/05/2002 11:02 Search Manda Gerry2k
26/05/2002 11:12 Update Manda Gerry2k
27/05/2002 15:34 Search Anka Anita1
12/08/2002 10:14 Search Amber Huarez
我有不一致的日志文件,例如:
25/05/2002 21:49 Search Dozer Anita1
25/05/2002 21:51 Update Anita1
26/05/2002 Search Manda Gerry2k
26/05/2002 11:12 Update Manda
27/05/2002 15:34 Anka Anita1
10:14 Search Amber Huarez
如果某些字段为空,我该怎么做才能防止出现异常?
这是一个代码
xmlFile.Formatting = Formatting.Indented;
xmlFile.WriteStartDocument();
xmlFile.WriteStartElement("lines");
while ((line = reader.ReadLine()) != null)
{
if (line.Contains("\t"))
{
string[] items = line.Split('\t');
xmlFile.WriteStartElement("line");
xmlFile.WriteElementString("id",items[0]);
xmlFile.WriteElementString("mandant", items[1]);
xmlFile.WriteElementString("datetime", items[2]);
xmlFile.WriteElementString("t_m", items[3]);
xmlFile.WriteElementString("user", items[4]);
xmlFile.WriteElementString("action", items[5]);
xmlFile.WriteElementString("info", items[6]);
xmlFile.WriteEndElement();
}
}
xmlFile.WriteEndDocument();
xmlFile.Close();
我认为只有当最后一项丢失时才会出现此问题, 因为中间缺少的项目在末尾仍然会有一个制表符分隔符。
在这种情况下,您可能应该使用内联条件来检查是否存在值:
xmlFile.WriteElementString("id", (items.Length > 0 ? items[0] : ""));
xmlFile.WriteElementString("mandant", (items.Length > 1 ? items[1] : ""));
xmlFile.WriteElementString("datetime", (items.Length > 2 ? items[2] : ""));
xmlFile.WriteElementString("t_m", (items.Length > 3 ? items[3] : ""));
xmlFile.WriteElementString("user", (items.Length > 4 ? items[4] : ""));
xmlFile.WriteElementString("action", (items.Length > 5 ? items[5] : ""));
xmlFile.WriteElementString("info", (items.Length > 6 ? items[6] : ""));
因此,这将为您提供超出记录末尾的槽中的默认空字符串。