命名空间: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
版权声明:本文为博主原创文章,转载请附上博文链接!


少有人走的路



















