命名空间:sharClass
功能:创建或者解析标准逗号分隔符的CSV文件,以及CSV相关的其它功能
功能详细说明:
在自动化机器的程序中,保存生产数据广泛应用CSV文件格式。EXCEL中就可以把文档保存为CSV格式,它其实是一种文本文件,只不过要求以特定的符号分隔两个字段内容,详细情况各位可以用EXCEL实验一下就知道了。
勇哥不推荐使用mdb数据库方式保存生产数据,虽然看上去它拥有查询方便的优势,但是因为access数据库的单个文件大小有限制(貌似是2G),超出这个大小,运行效率直线降低,所以并不推荐使用mdb数据库方式。当然Sql Server数据库是完全没有这种问题的,但是使用它来保存生产数据,简直可称得上高射炮打蚊子。
介绍一则勇哥之前使用mdb数据库得到的教训:
勇哥之前有台机器,带视觉检测的,每天生产会产生5000条生产数据。在调试阶段时就发现经常程序会偶尔在视觉工位卡住,然后程序界面失去响应一会,最后卡的机率是越来越多。
这个问题折磨了勇哥一个多星期,最恐怖的时候是白班夜班都会找我,完全不让我休息,人差点搞崩溃。
最后还是微软的CLR Profiler这个调试工具拯救了我,它是用于检测内存溢出和程序占用CPU时间的专业工具。
通过它我找到了程序的两个问题。
一是程序中有一处字符串拼接,会疯狂占用内存上G!
二是程序中当写入mdb数据库的时候,有机率会占用CPU时间很高,有时候超过20几秒!!
我立刻排查mdb数据库,发现其有2G巨大,然后度娘告诉我,很有可能造成这个写入超时的原因是因为数据库太大了引发的。
在这个结论出来之前,我从来来不怀疑mdb数据库会有这种写入超时的问题,打死我也不会相信。因为之前一般的小网站使用的也就是mdb数据库,几十上百人的并发访问都是可以承受的。
勇哥血的教训啊!各位记得生产数据最好是使用CSV格式一条条的保存!
CSVHelper类中只支持逗号分隔的CSV格式,它按如下的规则来处理CSV数据:
1. 字段中包含有逗号,该字段必须用双引号括起来
2. 字段中包含有换行符,该字段必须用双引号括起来
3. 字段中的双引号用两个双引号表示
下面是一篇博文是关于淘宝CSV文件格式的研究,各位可以参考一下。
https://www.cnblogs.com/hackpig/archive/2010/02/14/1668222.html
考虑到我们只是用于自动化行业,因为勇哥并没有花时间完全实现上面文章的规则,因此这个类还解析不了淘宝的CSV文件。
但是它对于解析字段内容包含有引号与逗号的情况还是可以应付的。
常用函数列表:
//生成一条符合CSV格式的字符串 public static string createCSVRow(this List<string> data) //拆分一条逗号分隔的CSV字符串 public static List<string> explainCSVRow(this string data) /// 保存数据到CSV文件(托管式) public static void SaveAsy(string filePath,string fileName, string content,bool IsSave=true) /// 将DataTable中数据写入到CSV文件中 public static void ConvertDataTableToVSV(DataTable dt, string fullPath) /// 将CSV文件的数据读取到DataTable中 public static DataTable ReadCSV(string filePath) /// 删除多余Log文件:支持文件名为"yyyyMMdd.csv"格式 private static void DeleteOverFile(string FilePath,int howDays)
参考例子:
using sharClass; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace csvhelperTest { public partial class Form1 : Form { private string path = AppDomain.CurrentDomain.BaseDirectory + "csvdata.csv"; private List<string> list1 = new List<string>(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { var txt = tblistField.Text; if(txt.Length>0) { list1.Add(txt); } listBox1.DataSource = null; listBox1.DataSource = list1; } private void btnCreateCSV_Click(object sender, EventArgs e) { try { var s1 = CSVHelper.createCSVRow(list1); File.WriteAllText(path, s1); System.Diagnostics.Process.Start(path); } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void btnReadCSV_Click(object sender, EventArgs e) { try { var list2 = CSVHelper.explainCSVRow(File.ReadAllText(path)); listBox2.DataSource = null; listBox2.DataSource = list2; } catch(Exception ex) { MessageBox.Show(ex.Message); } } } }
输入字段
Excel查看生成的csv文件的内容
读取csv文件显示到listbox
netMarketing类库中,凡是要用到逗号分隔字符串的地方,都会考虑到使用CSVHelper类。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

