使用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] : ""));

因此,这将为您提供超出记录末尾的槽中的默认空字符串。