c#读取文本文档实践4-读入到list泛型集合计算后写入新文档
商品 数量 单价
英语 66 100
语文 66 80
数学 66 100
化学 66 40
物理 66 60
上面截图是要处理的文本文档内容,目的是计算出总价并加在最后一列。
这一篇与上一篇比较类似,目的相同,不同之处为读入到了list中,list泛型集合可以当作可变长数组使用。通过StreamReader创建一个流sr,然后通过一个while循环将读得的每行数据放入字符串类型的list中,之后对每个list分割,并返回一个字符串数组,这个字符串数组就可以通过转化为double来计算了,计算完成后可以通过放入sb中统一写入到文本文档中。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.IO; 6 7 namespace 用list泛型集合操作文本文档 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 ////读取文本文档内容到list 14 string fileName = @"C:\Users\Administrator\Desktop\书名总价格计算.txt"; 15 FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 16 List<string> list = new List<string>(); 17 StreamReader sr = new StreamReader(fs, Encoding.Default);//以默认的解码方式 18 //使用StreamReader类来读取文件 19 sr.BaseStream.Seek(0, SeekOrigin.Begin); 20 // 从数据流中读取每一行,直到文件的最后一行 21 string tmp = sr.ReadLine(); 22 string[] strNew; 23 StringBuilder sb = new StringBuilder();//创建sb 24 int textLineCount = 0; 25 while (tmp != null) 26 { 27 list.Add(tmp); 28 tmp = sr.ReadLine(); 29 Console.WriteLine(list[textLineCount++]); 30 if ((textLineCount - 1) != 0) 31 { 32 strNew = list[textLineCount - 1].Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); 33 sb.Append(strNew[0].ToString() + " " + strNew[1].ToString() + " " + strNew[2].ToString() + " " + (Convert.ToDouble(strNew[1]) * Convert.ToDouble(strNew[2])).ToString() + System.Environment.NewLine); 34 } 35 else 36 { 37 //将list转换为字符串数组 38 strNew = list[textLineCount - 1].Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); 39 //将字符串数组写入sb 40 sb.Append(strNew[0].ToString() + " " + strNew[1].ToString() + " " + strNew[2].ToString() + " 总价格" + System.Environment.NewLine); 41 } 42 43 } 44 //将sb输出到计算结果 45 File.WriteAllText(@"C:\Users\Administrator\Desktop\书名总价格计算结果2.txt", sb.ToString()); 46 //查看文本文档共多少行 47 //Console.WriteLine(textLineCount); 48 //Console.WriteLine(list.Count ); 49 //查看list[1]内容 50 Console.WriteLine(list[1]); 51 52 //关闭此StreamReader对象 53 sr.Close(); 54 fs.Close(); 55 } 56 } 57 }