做这个程序的起因是每个月另一个单位的会计总会拿着一张软盘来找我,然后让我帮她计算一个文本文件中的一个合计金额。文本文件中的内容如下:
格式化的字符串如下所示
000001王淑梅 210101100098195 1560.00
000002刘香兰 210101100098203 1560.00
000003邢桂兰 210101100098211 1560.00
000004王杰 210101100098229 1560.00
000005沈殿香 210101100098237 1660.00
手工统计起来很麻烦,先要复制到WORD里,再复制到EXCEL里,然后计算。
我是个懒人,所以决定用程序解决。
private void timerOpen_Tick(object sender, EventArgs e)
{
if (File.Exists(txtBXFilePath.Text))
{
lvwBXSum.Items.Clear();
double bxSum = 0;
StreamReader mReader = new StreamReader(txtBXFilePath.Text,System.Text.Encoding.GetEncoding("gb2312"));//这里的System.Text.Encoding.GetEncoding("gb2312")可以保证读出汉字不是乱码
string sLine = "";
byte[] bwrite;//它可以使读出的汉字占2个字节
while (sLine != null)
{
sLine = mReader.ReadLine();//ReadLine()方法读出的汉字占1个字节
if (sLine != null)
{
bwrite = Encoding.GetEncoding("GB2312").GetBytes(sLine.ToCharArray());
ListViewItem ser = new ListViewItem();
ser.SubItems[0].Text = (sLine.Substring(0,6));
ser.SubItems.Add(sLine.Substring(6,4).Trim());
//由于前面的人名字数会有不同,所以这里就要用到下面的代码,否则是对不齐的
ser.SubItems.Add(Encoding.Default.GetString(bwrite, 15, 15));
ser.SubItems.Add(sLine.Substring(35).Trim());
bxSum += Convert.ToDouble(sLine.Substring(35));
lvwBXSum.Items.Add(ser);
}
}
ListViewItem sumL = new ListViewItem();
sumL.SubItems.Add("");
sumL.SubItems.Add("合计");
sumL.SubItems.Add(bxSum.ToString());
lvwBXSum.Items.Add(sumL);
mReader.Close();
if(MessageBox.Show(bxSum.ToString() + "", "合计",MessageBoxButtons.YesNo) == DialogResult.OK);
Close();
}
如果只是简单的带汉字的txt文件,就可以这样读:
StreamReader sr = new StreamReader(bs,System.Text.Encoding.Default);