/// <summary>
/// 打开CSV 文件
/// </summary>
/// <param name="fileName">文件全名</param>
/// <returns>DataTable</returns>
public DataTable OpenCSV(string fullFileName)
{
return OpenCSV(fullFileName, 0, 0, 0, 0, true);
}
public static DataTable OpenCSV(string fullFileName, Int16 firstRow = 0, Int16 firstColumn = 0, Int16 getRows = 0, Int16 getColumns = 0, bool haveTitleRow = true)
{
DataTable dt = new DataTable();
FileStream fs = new FileStream(fullFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
//记录每次读取的一行记录
string strLine = "";
//记录每行记录中的各字段内容
string[] aryLine;
//标示列数
int columnCount = 1;
//是否已建立了表的字段
bool bCreateTableColumns = false;
//第几行
int iRow = 1;
//去除无用行
if (firstRow > 0)
{
for (int i = 1; i < firstRow; i++)
{
sr.ReadLine();
}
}
// { ",", ".", "!", "?", ";", ":", " " };
string[] separators = { "," };
//逐行读取CSV中的数据
List<int> lost = new List<int>();
while ((strLine = sr.ReadLine()) != null)
{
strLine = strLine.Trim();
strLine = strLine.Replace(",#", "");
aryLine = strLine.Split(separators, System.StringSplitOptions.None);
if (bCreateTableColumns == false)
{
bCreateTableColumns = true;
columnCount = aryLine.Length;
//创建列
for (int i = firstColumn; i < (getColumns == 0 ? columnCount : firstColumn + getColumns); i++)
{
if (aryLine[i] != "")
{
DataColumn dc = new DataColumn(haveTitleRow == true ? aryLine[i] : "COL" + i.ToString());
dt.Columns.Add(dc);
}
else
{
lost.Add(i);
}
}
bCreateTableColumns = true;
if (haveTitleRow == true)
{
continue;
}
}
DataRow dr = dt.NewRow();
for (int j = firstColumn; j < (getColumns == 0 ? columnCount : firstColumn + getColumns); j++)
{
if (!lost.Contains(j))
{
if (aryLine[j] == "")
{
aryLine[j] = "empty";
}
dr[j - firstColumn] = aryLine[j];
}
}
dt.Rows.Add(dr);
iRow = iRow + 1;
if (getRows > 0)
{
if (iRow > getRows)
{
break;
}
}
}
sr.Close();
fs.Close();
return dt;
}
public void SaveCSV(DataTable dt, string fullPath)//table数据写入csv
{
System.IO.FileInfo fi = new System.IO.FileInfo(fullPath);
if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
System.IO.FileStream fs = new System.IO.FileStream(fullPath, System.IO.FileMode.Create,
System.IO.FileAccess.Write);
System.IO.StreamWriter sw = new System.IO.StreamWriter(fs, System.Text.Encoding.UTF8);
string data = "";
for (int i = 0; i < dt.Columns.Count; i++)//写入列名
{
data += dt.Columns[i].ColumnName.ToString();
if (i < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
for (int i = 0; i < dt.Rows.Count; i++) //写入各行数据
{
data = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
string str = dt.Rows[i][j].ToString();
str = str.Replace("\"", "\"\"");//替换英文冒号 英文冒号需要换成两个冒号
if (str.Contains(',') || str.Contains('"')
|| str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中
{
str = string.Format("\"{0}\"", str);
}
data += str;
if (j < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}
sw.Close();
fs.Close();
}