using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace XImaging.Automation.Library.HxDriverLib.Files
|
{
|
public class CsvFile
|
{
|
private FileStream fs;
|
StreamWriter sw;
|
|
public CsvFile(string fullFileName)
|
{
|
this.fs = new FileStream(fullFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
|
this.sw = new StreamWriter(fs, System.Text.Encoding.Default);
|
}
|
|
public void Append(DataTable dt)
|
{
|
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++)
|
{
|
data += dt.Rows[i][j].ToString();
|
if (j < dt.Columns.Count - 1)
|
{
|
data += ",";
|
}
|
}
|
sw.WriteLine(data);
|
}
|
}
|
|
public void Append(string line)
|
{
|
sw.WriteLine(line);
|
}
|
|
public void Append(params string[] value)
|
{
|
string data = "";
|
//写出列名称
|
for (int i = 0; i < value.Length; i++)
|
{
|
data += value[i];
|
if (i < value.Length - 1)
|
{
|
data += ",";
|
}
|
}
|
sw.WriteLine(data);
|
}
|
|
public void AppendLine()
|
{
|
sw.WriteLine();
|
}
|
|
public void Save()
|
{
|
this.sw.Close();
|
this.fs.Close();
|
}
|
|
}
|
|
public class CsvHelper
|
{
|
public static DataTable ReadFile(string fullFileName, int firstRow=0, int firstColumn=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 = 0;
|
//是否已建立了表的字段
|
bool bCreateTableColumns = false;
|
//第几行
|
int iRow = 1;
|
|
//去除无用行
|
if (firstRow > 0)
|
{
|
for (int i = 1; i < firstRow; i++)
|
{
|
sr.ReadLine();
|
}
|
}
|
|
string[] separators = { "," };
|
//逐行读取CSV中的数据
|
while ((strLine = sr.ReadLine()) != null)
|
{
|
strLine = strLine.Trim();
|
aryLine = strLine.Split(separators, System.StringSplitOptions.RemoveEmptyEntries);
|
|
if (bCreateTableColumns == false)
|
{
|
bCreateTableColumns = true;
|
columnCount = aryLine.Length;
|
//创建列
|
for (int i = firstColumn; i < columnCount; i++)
|
{
|
DataColumn dc
|
= new DataColumn(haveTitleRow == true ? aryLine[i] : "COL" + i.ToString());
|
dt.Columns.Add(dc);
|
}
|
|
bCreateTableColumns = true;
|
|
if (haveTitleRow == true)
|
{
|
continue;
|
}
|
}
|
|
|
DataRow dr = dt.NewRow();
|
for (int j = firstColumn; j < columnCount; j++)
|
{
|
dr[j - firstColumn] = aryLine[j];
|
}
|
dt.Rows.Add(dr);
|
|
iRow = iRow + 1;
|
}
|
|
sr.Close();
|
fs.Close();
|
return dt;
|
}
|
|
public static void SaveFile(DataTable dt, string fullFileName)
|
{
|
FileStream fs = new FileStream(fullFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
|
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
|
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++)
|
{
|
data += dt.Rows[i][j].ToString();
|
if (j < dt.Columns.Count - 1)
|
{
|
data += ", ";
|
}
|
}
|
sw.WriteLine(data);
|
}
|
|
sw.Close();
|
fs.Close();
|
}
|
}
|
}
|