.net实现统计txt记事本消费单的数据

平时用系统自带的记事本记录日常消费,简单快捷但是缺少统计功能,不清楚每个月花费多少,于是写个程序统计一下。

下面只给出一点测试数据:

统计结果如下:

实现代码:

Default.aspx

<style type="text/css">
.f{ color:Red; font-weight:bold;}
</style>

<asp:Literal runat="server" ID="ltlResult"></asp:Literal>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Text;
namespace TestProject2011
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string filepath = Server.MapPath("~/test.txt");
using (StreamReader sr = new StreamReader(filepath, Encoding.UTF8))
{
StringBuilder sbDetail
= new StringBuilder(); //详细
StringBuilder sbMonth = new StringBuilder(); //月份统计
StringBuilder sbYear = new StringBuilder(); //年统计
string strline = null; //txt文本每行内容
decimal daySum = 0; //日金额
decimal monthSum = 0; //月份金额
decimal yearSum = 0; //年金额
decimal allSum = 0; //总金额
DateTime dtLastDate = DateTime.MinValue; //临时保存统计的最后一个月
string patternDate = @"\d{4,4}-\d{1,2}-\d{1,2}"; //日期正则
string patternMoney = @"^\d+(\.\d+)?";//金额正则
while ((strline = sr.ReadLine()) != null)
{
Match m
= Regex.Match(strline, patternDate);
if (m.Success)
{
DateTime dt
= Convert.ToDateTime(m.ToString());
if (dt.Month > dtLastDate.Month || dt.Year > dtLastDate.Year) //下一个月或下一年
{
if (dtLastDate != DateTime.MinValue)
{
sbDetail.Append(
"<span class='f'>本月统计到" + dtLastDate.Day + "号结束,消费金额:" + monthSum + "</span><br />");
sbMonth.Append(dt.AddMonths(
-1).ToString("yyyy年MM月") + "" + monthSum + "</span><br />");
if (dt.Year > dtLastDate.Year)
{
sbYear.Append(dtLastDate.Year
+ "年的消费金额:" + yearSum + "<br />");
yearSum
= 0;
}
monthSum
= 0;
}
sbDetail.Append(
"<span class='f'>本月开始:" + m.ToString() + "</span><br />" + strline + "<br />");
}
else if (dt < dt.AddMonths(1).AddDays(-1))
{
sbDetail.Append(m.ToString()
+ "<br />");
}
dtLastDate
= dt;
}
else
{
string[] sArr = strline.Split('');
foreach (string s in sArr)
{
if (!string.IsNullOrEmpty(s))
{
Match mm
= Regex.Match(s, patternMoney);
if (mm.Success)
{
decimal tempNum = decimal.Parse(mm.ToString());
daySum
+= tempNum;
monthSum
+= tempNum;
yearSum
+= tempNum;
allSum
+= tempNum;
}
}
}
string daySumStr = daySum > Convert.ToDecimal(100) ? "<span class='f'>" + daySum.ToString() + "</span>" : daySum.ToString();
sbDetail.Append(strline.PadRight(
30, '=') + "当天:" + daySumStr + " 当月:" + monthSum + " 当年:" + yearSum + " 总共:" + allSum + "<br />");
daySum
= 0;
}
}
sbDetail.Append(
"<span class='f'>本月统计到" + dtLastDate.Day + "号结束,消费金额:" + monthSum + "</span><br />");
sbMonth.Append(dtLastDate.ToString(
"yyyy年MM月") + "" + monthSum + "<br />");
sbYear.Append(dtLastDate.Year
+ "年的消费金额:" + yearSum + "<br />");
ltlResult.Text
= sbDetail.ToString() + "<br /><br />按月统计如下:<br />" + sbMonth.ToString() + "<br />按年统计如下:<br />" + sbYear.ToString() + "总共消费金额:" + allSum;
}
}
}
}

原文地址:https://www.cnblogs.com/gdjlc/p/2086868.html