我写了一个读取日志的工具,计算日志中例如预处理开始到预处理结束总共花了多长时间。其中通过一个returnTure方法比对“预处理开始”这样的字段,平且返回预处理开始这个时间。执行过程中预处理开始到预处理结束计算是对的,在第二次计算批处理开始到批处理结束的时候。批处理开始没有进returnTure这个方法体。这是为什么。而批处理结束却有进去。请高手帮忙看下,另外能否指定下,下次我这样碰到问题该如何着手解决,解决问题的思路应该是怎么样的?先在这里拜谢了!代码如下: private void btnRead_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
List<Item> itemList = new List<Item>();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释
XmlReader reader = XmlReader.Create(@"..\..\TxtToExcel.xml", settings);
xmlDoc.Load(reader);
XmlNode xn = xmlDoc.SelectSingleNode("XMLItem");
XmlNodeList xnl = xn.ChildNodes;
foreach (XmlNode xn1 in xnl)
{
Item item = new Item();
XmlElement xe = (XmlElement)xn1;
XmlNodeList xnl0 = xe.ChildNodes;
item.Start = xnl0.Item(0).InnerText;
item.End = xnl0.Item(1).InnerText;
TimeSpan dtStart = new TimeSpan(retrunTrue(item.Start).Ticks);//就是这里第二次批处理开始的时候没有进方法 TimeSpan dtEnd = new TimeSpan(retrunTrue(item.End).Ticks);
TimeSpan ts = dtEnd.Subtract(dtStart).Duration();
item.Time = ts.Days.ToString() + "天" + ts.Hours.ToString() + "时" + ts.Minutes.ToString() + "分" + ts.Seconds.ToString() + "秒";//时间
itemList.Add(item);
}
reader.Close();
for (int i = 0; i < itemList.Count; i++)
{
ListViewItem litem = new ListViewItem();
litem.SubItems.Clear();
litem.SubItems.Add(itemList[i].Start);
litem.SubItems.Add(itemList[i].End);
litem.SubItems.Add(itemList[i].Time);
listView1.Items.Add((ListViewItem)litem.Clone());//(ListViewItem)litem.Clone()
}
for (int i = 0; i < listView1.Items.Count; i++)
{
listView1.Items[i].SubItems[0].Text = (i + 1).ToString();
}
}
private void btnSave_Click(object sender, EventArgs e)
{
}
public DateTime retrunTrue( string b)
{
DateTime dt1 = DateTime.Now;
string path = txtDir.Text;
if (path == null) MessageBox.Show("路径不能为空,请选择日志文件!");
StreamReader sr = new StreamReader(path, Encoding.GetEncoding("gb2312"));
string str = null;
ArrayList arrText = new ArrayList();
while ((str = sr.ReadLine()) != null )
{
arrText.Add(str);
}
sr.Close();
for (int i=0;i<arrText.Count ;i++)
{
string aa = Convert.ToString(arrText[i]);
string time = null;
string cccc=null;
int l = b.Length;
if (l == (aa.Substring(21)).Length)
{
cccc = aa.Substring(21, l);
if (cccc.Equals(b))
{
time = aa.Substring(1, 19);
MessageBox.Show(time.ToString ());
dt1 = Convert.ToDateTime(time);
break;
}
}
}
return dt1;
} //定义的基础类 public class Item
{
private string start;
private string end;
private string time;
public string Start
{
get
{
return start;
}
set
{
start = value;
}
}
public string End
{
get
{
return end;
}
set
{
end = value;
}
}
public string Time
{
get
{
return time;
}
set
{
time = value;
}
}
}XML如下:<?xml version="1.0" encoding="utf-8" ?>
<XMLItem>
<Item>
<Start>预处理开始</Start>
<End>预处理完成</End>
</Item>
<Item>
<Start>批处理开始</Start>
<End>批处理完成!</End>
</Item>
</XMLItem>日志文件如下:[2012-12-07 16:33:08]预处理开始
[2012-12-07 16:35:10]预处理结束
[2012-12-08 11:33:08]批处理开始
[2012-12-09 16:35:10]批处理结束
{
XmlDocument xmlDoc = new XmlDocument();
List<Item> itemList = new List<Item>();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释
XmlReader reader = XmlReader.Create(@"..\..\TxtToExcel.xml", settings);
xmlDoc.Load(reader);
XmlNode xn = xmlDoc.SelectSingleNode("XMLItem");
XmlNodeList xnl = xn.ChildNodes;
foreach (XmlNode xn1 in xnl)
{
Item item = new Item();
XmlElement xe = (XmlElement)xn1;
XmlNodeList xnl0 = xe.ChildNodes;
item.Start = xnl0.Item(0).InnerText;
item.End = xnl0.Item(1).InnerText;
TimeSpan dtStart = new TimeSpan(retrunTrue(item.Start).Ticks);//就是这里第二次批处理开始的时候没有进方法 TimeSpan dtEnd = new TimeSpan(retrunTrue(item.End).Ticks);
TimeSpan ts = dtEnd.Subtract(dtStart).Duration();
item.Time = ts.Days.ToString() + "天" + ts.Hours.ToString() + "时" + ts.Minutes.ToString() + "分" + ts.Seconds.ToString() + "秒";//时间
itemList.Add(item);
}
reader.Close();
for (int i = 0; i < itemList.Count; i++)
{
ListViewItem litem = new ListViewItem();
litem.SubItems.Clear();
litem.SubItems.Add(itemList[i].Start);
litem.SubItems.Add(itemList[i].End);
litem.SubItems.Add(itemList[i].Time);
listView1.Items.Add((ListViewItem)litem.Clone());//(ListViewItem)litem.Clone()
}
for (int i = 0; i < listView1.Items.Count; i++)
{
listView1.Items[i].SubItems[0].Text = (i + 1).ToString();
}
}
private void btnSave_Click(object sender, EventArgs e)
{
}
public DateTime retrunTrue( string b)
{
DateTime dt1 = DateTime.Now;
string path = txtDir.Text;
if (path == null) MessageBox.Show("路径不能为空,请选择日志文件!");
StreamReader sr = new StreamReader(path, Encoding.GetEncoding("gb2312"));
string str = null;
ArrayList arrText = new ArrayList();
while ((str = sr.ReadLine()) != null )
{
arrText.Add(str);
}
sr.Close();
for (int i=0;i<arrText.Count ;i++)
{
string aa = Convert.ToString(arrText[i]);
string time = null;
string cccc=null;
int l = b.Length;
if (l == (aa.Substring(21)).Length)
{
cccc = aa.Substring(21, l);
if (cccc.Equals(b))
{
time = aa.Substring(1, 19);
MessageBox.Show(time.ToString ());
dt1 = Convert.ToDateTime(time);
break;
}
}
}
return dt1;
} //定义的基础类 public class Item
{
private string start;
private string end;
private string time;
public string Start
{
get
{
return start;
}
set
{
start = value;
}
}
public string End
{
get
{
return end;
}
set
{
end = value;
}
}
public string Time
{
get
{
return time;
}
set
{
time = value;
}
}
}XML如下:<?xml version="1.0" encoding="utf-8" ?>
<XMLItem>
<Item>
<Start>预处理开始</Start>
<End>预处理完成</End>
</Item>
<Item>
<Start>批处理开始</Start>
<End>批处理完成!</End>
</Item>
</XMLItem>日志文件如下:[2012-12-07 16:33:08]预处理开始
[2012-12-07 16:35:10]预处理结束
[2012-12-08 11:33:08]批处理开始
[2012-12-09 16:35:10]批处理结束
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货