C#操作CSV(保存到DataTable、获取标题)
来源:互联网 发布:大数据工程师工作累吗 编辑:程序博客网 时间:2024/06/06 00:59
说明:1、读取CSV文件内容到DataTable中,2、只湖区CSV文件的标题。
方法一: 保存到DataTable并显示页面(OLEDB读取方式)
#region 读取Csv文件
public static DataTable getCsvData(string pCsvpath, string pCsvname)
{
try
{
DataSet dsCsvData = new DataSet();
OleDbConnection OleCon = new OleDbConnection();
OleDbCommand OleCmd = new OleDbCommand();
OleDbDataAdapter OleDa = new OleDbDataAdapter();
OleCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pCsvpath + ";Extended Properties='Text;FMT=Delimited(,);HDR=YES;IMEX=1';";
OleCon.Open();
DataTable dts1 = OleCon.GetSchema("Tables");
DataTable dts2 = OleCon.GetSchema("Columns");
OleCmd.Connection = OleCon;
OleCmd.CommandText = "select * from [" + pCsvname + "] where 1=1";
OleDa.SelectCommand = OleCmd;
OleDa.Fill(dsCsvData, "Csv");
OleCon.Close();
return dsCsvData.Tables[0];
}
catch (Exception ex)
{
return null;
}
}
#endregion
方法二:保存到DataTable并显示页面(OLEDB读取方式)
private void button5_Click(object sender, EventArgs e)
{
string fileName = textBox1.Text; //文件路径
DataSet ds = new DataSet();
OleDbConnection csvConn = new OleDbConnection();//Jet
try
{
if (Path.GetExtension(fileName).Equals(".csv"))
{
csvConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName.Substring(0, fileName.LastIndexOf('\\')) + ";Extended Properties='Text;FMT=Delimited;HDR=YES;IMEX=1;ImportMixedTypes=Text'";
}
else
{
csvConn.ConnectionString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + Path.GetDirectoryName(fileName) + "";
}
csvConn.Open();
OleDbCommand oleCmd = new OleDbCommand();
oleCmd.Connection = csvConn;
oleCmd.CommandText = "select * from " + Path.GetFileName(fileName) + " where 1=1 ";
OleDbDataAdapter oleDa = new OleDbDataAdapter();
oleDa.SelectCommand = oleCmd;
oleDa.Fill(ds, Path.GetFileName(fileName));
csvConn.Close();
this.dataGridView1.DataSource = ds.Tables[0];
GC.Collect();
}
catch (Exception vErr)
{
MessageBox.Show(vErr.Message);
}
finally
{
csvConn.Close();
GC.Collect();//垃圾回收
}
}
方法三:读取CSV到DataTable中,并显示页面(StreamReader方式读取,这种方式,读取数据效率低下,但是数据完整)
public void CSV()
{
string pCsvPath = "D:/auto.csv";//文件路径
try
{
String line;
String[] split = null;
DataTable table = new DataTable();
DataRow row = null;
StreamReader sr = new StreamReader(pCsvPath, System.Text.Encoding.Default);
//创建与数据源对应的数据列
line = sr.ReadLine();
split = line.Split(',');
foreach (String colname in split)
{
table.Columns.Add(colname, System.Type.GetType("System.String"));
}
//将数据填入数据表
int j = 0;
while ((line = sr.ReadLine()) != null)
{
j = 0;
row = table.NewRow();
split = line.Split(',');
foreach (String colname in split)
{
row[j] = colname;
j++;
}
table.Rows.Add(row);
}
sr.Close();
//显示数据
this.dataGridView1.DataSource = table.DefaultView;
}
catch (Exception vErr)
{
MessageBox.Show(vErr.Message);
}
finally
{
GC.Collect();
}
}
方法四:获取CSV标题,保存到数组中(OLEDB方式)
public static string[] GetCsvHead(string pathcsv, string FileName)
{
try
{
OleDbConnection OleCon = new OleDbConnection();
OleDbCommand OleCmd = new OleDbCommand();
OleDbDataAdapter OleDa = new OleDbDataAdapter();
DataSet dsCsvData = new DataSet();
OleCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathcsv + ";Extended Properties='Text;FMT=Delimited(,);HDR=NO;IMEX=1';";
OleCon.Open();
DataTable dts1 = OleCon.GetSchema("Tables");
DataTable dts2 = OleCon.GetSchema("Columns");
OleCmd.Connection = OleCon;
OleCmd.CommandText = "select top 1 * from [" + FileName + "]";
OleDa.SelectCommand = OleCmd;
OleDa.Fill(dsCsvData, "Csv");
OleCon.Close();
string[] CsvHeader;
if (dsCsvData != null)
{
CsvHeader = new string[dsCsvData.Tables[0].Columns.Count];
DataRow row = dsCsvData.Tables[0].Rows[0];
for (int i = 0; i < CsvHeader.Length; i++)
{
CsvHeader[i] = row[i].ToString();
}
return CsvHeader;
}
else
{
return null;
}
}
catch (Exception vErr)
{
MessageBox.Show(vErr.Message);
return null;
}
finally
{
GC.Collect();
}
}
方法五:获取CSV标题,保存到数组中(StreamReader方式)
private void button4_Click(object sender, EventArgs e)
{
string strpath = textBox1.Text;//文件的路径
try
{
int intColCount = 0;
bool blnFlag = true;
DataColumn mydc;
DataRow mydr;
string strline;
string[] aryline;
DataTable mycsvdt = new DataTable();
StreamReader mysr = new StreamReader(strpath, System.Text.Encoding.Default);
if ((strline = mysr.ReadLine()) != null)
{
aryline = strline.Split(new char[] { ',' });
//给datatable加上列名
if (blnFlag)
{
blnFlag = false;
intColCount = aryline.Length;
int col = 0;
for (int i = 0; i < aryline.Length; i++)
{
col = i + 1;
mydc = new DataColumn(col.ToString());
mycsvdt.Columns.Add(mydc);
}
}
//填充数据并加入到datatable中
mydr = mycsvdt.NewRow();
for (int i = 0; i < intColCount; i++)
{
mydr[i] = aryline[i];
}
mycsvdt.Rows.Add(mydr);
}
this.dataGridView1.DataSource = mycsvdt;
}
catch (Exception vErr)
{
MessageBox.Show(vErr.Message);
}
finally
{
GC.Collect();
}
}
方法六:获取CSV标题,保存到数组中(OLEDB方式)
private void button7_Click(object sender, EventArgs e)
{
string fileName = textBox1.Text; //csv 文件路径
string[] fileTile;
DataSet ds = new DataSet();
OleDbConnection csvConn = new OleDbConnection();
try
{
if (Path.GetExtension(fileName).Equals(".csv"))
{
csvConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName.Substring(0, fileName.LastIndexOf('\\')) + ";Extended Properties='Text;FMT=Delimited;HDR=YES;IMEX=1;ImportMixedTypes=Text'";
}
else
{
csvConn.ConnectionString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + Path.GetDirectoryName(fileName) + "";
}
csvConn.Open();
OleDbCommand oleCmd = new OleDbCommand();
oleCmd.Connection = csvConn;
oleCmd.CommandText = "select * from " + Path.GetFileName(fileName) + " where 1<>1 ";
OleDbDataAdapter oleDa = new OleDbDataAdapter();
oleDa.SelectCommand = oleCmd;
oleDa.Fill(ds, Path.GetFileName(fileName));
csvConn.Close();
GC.Collect();
fileTile = new string[ds.Tables[0].Columns.Count]; //保存csv文件标题
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
fileTile[i] = ds.Tables[0].Columns[i].Caption.ToString();
}
}
catch (Exception vErr)
{
MessageBox.Show(vErr.Message);
}
finally
{
csvConn.Close();
GC.Collect();//垃圾回收
}
}
方法六:读取csv到DataTable(streamReader的方式)这个方法对双引号,字段内的分号,进行了处理,可以正常读处理。
private void button2_Click(object sender, EventArgs e)
{
string pCsvPath = textBox1.Text;
String line;
String[] split = null;
DataTable table = new DataTable();
DataRow row = null;
StreamReader sr = new StreamReader(pCsvPath, System.Text.Encoding.Default);
//创建与数据源对应的数据列
line = sr.ReadLine();
if (string.IsNullOrEmpty(line))
{
return;
}
split = line.Split(',');
for (int i = 0; i < split.Length; i++)
{
table.Columns.Add(split[i], System.Type.GetType("System.String"));
}
//将数据填入数据表
while (!string.IsNullOrEmpty(line = sr.ReadLine()))
{
row = table.NewRow();
//split = line.Split(',');
string[][] asplit = read_csv(line);
if (table.Columns.Count >= asplit[0].Length)
{
for (int p = 0; p < asplit[0].Length; p++)
{
row[p] = asplit[0][p];
}
table.Rows.Add(row);
continue;
}
if (table.Columns.Count < asplit.Length)
{
for (int p = 0; p < table.Columns.Count; p++)
{
row[p] = asplit[p];
}
table.Rows.Add(row);
continue;
}
}
sr.Close();
//显示数据
this.dataGridView1.DataSource = table.DefaultView;
}
public string[][] read_csv(string text)
{
if (text == null)
{
return null;
}
var text_array = new List<string[]>();
var line = new List<string>();
var field = new StringBuilder();
//是否在双引号内
bool in_quata = false;
//字段是否开始
bool field_start = true;
for (int i = 0; i < text.Length; i++)
{
char ch = text[i];
if (in_quata)
{
//如果已经处于双引号范围内
if (ch == '\"')
{
//如果是两个引号,则当成一个普通的引号处理
if (i < text.Length - 1 && text[i + 1] == '\"')
{
field.Append('\"');
i++;
}
else
{
//否则退出引号范围
in_quata = false;
}
}
else //双引号范围内的任何字符(除了双引号)都当成普通字符
{
field.Append(ch);
}
}
else
{
switch (ch)
{
#region
case ',': //新的字段开始
line.Add(field.ToString());
field.Remove(0, field.Length);
field_start = true;
break;
case '\"': //引号的处理
if (field_start)
{
in_quata = true;
}
else
{
field.Append(ch);
}
break;
case '\r': //新的记录行开始
if (field.Length > 0 || field_start)
{
line.Add(field.ToString());
field.Remove(0, field.Length);
}
text_array.Add(line.ToArray());
line.Clear();
field_start = true;
//在 window 环境下,\r\n通常是成对出现,所以要跳过
if (i < text.Length - 1 && text[i + 1] == '\n')
{
i++;
}
break;
default:
field_start = false;
field.Append(ch);
break;
#endregion
}
}
}
//文件结束
if (field.Length > 0 || field_start)
{
line.Add(field.ToString());
}
if (line.Count > 0)
{
text_array.Add(line.ToArray());
}
return text_array.ToArray();
}
- C#操作CSV(保存到DataTable、获取标题)
- c# wince datatable保存成csv
- C# 读写CSV文件到DataTable
- C#读取csv文件内容到DataTable
- C#读取CSV文件到DataTable
- 读取CSV到DataTable
- CSV 导入到 Datatable
- C#中将DataTable中数据导出到csv文件中
- C#中将DataTable中数据导出到csv文件中
- C#中将DataTable中数据导出到csv文件中
- C#导出DataTable数据到CSV文件中
- C#中将DataTable中数据导出到csv文件中
- C# - 数据备份-datatable数据写入到CSV文件中
- C#中将DataTable中数据导出到csv文件中
- c#将DataTable中数据写入到CSV文件中
- 读取CSV文件到DataTable
- CSV到DATATABLE(1)
- CSV到DATATABLE(2)
- window下java执行批处理文件
- android 之 listview (二)
- eclipse 读取 csv文件
- 如何更好地限制一个UITextField的输入长度
- OpenGL配置VC6.0+WIN7
- C#操作CSV(保存到DataTable、获取标题)
- 非阻塞connect errno为EINPROGRESS,如何判断已经连接上了?
- 宝马2系敞篷版预计在2014年底推出
- 快速排序
- 中国34个省未来发展趋势深度分析
- SpringMVC基于注解教程(一)
- JavaScript高级程序设计 学习笔记
- 从 Empty Application 到 Single View Application
- NYOJ 17&214单调递增子序列