C# 从CSV文件创建数据表
我正在做一个项目,我需要读取一个CSV文件,然后用它的数据填充数据集。我一直在搜索,在OleDB中发现了一些有趣的东西 我有一个CSVReader类:C# 从CSV文件创建数据表,c#,visual-studio,C#,Visual Studio,我正在做一个项目,我需要读取一个CSV文件,然后用它的数据填充数据集。我一直在搜索,在OleDB中发现了一些有趣的东西 我有一个CSVReader类: class CSVReader { public DataTable GetDataTable(string filePath) { OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.
class CSVReader
{
public DataTable GetDataTable(string filePath)
{
OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Path.GetDirectoryName(filePath) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"");
conn.Open();
string strQuery = "SELECT * FROM [" + Path.GetFileName(filePath) + "]";
OleDbDataAdapter adapter = new OleDbDataAdapter(strQuery, conn);
DataSet ds = new System.Data.DataSet("CSV File");
adapter.Fill(ds);
return ds.Tables[0];
}
}
我在这里称之为:
CSVReader datareader = new CSVReader();
DataTable dt = datareader.GetDataTable(filepath);
问题在于,它将第一行(标题行)解析为列的一个标识符,我的意思是:这是CSV文件的标题:
Name, Product Name, Server, Vendor, Start Time, End Time, Host Name, User Name, Project Name, Usage time (hours)
之后是所有数据,用逗号分隔
当我读取文件时,填充数据集并打印dt.Columns.Count,它显示它只有一列
有什么帮助吗
提前谢谢。如果没什么特别的
我用
这种代码
TextReader tr1 = new StreamReader(@"c:\pathtofile\filename",true);
var Data = tr1.ReadToEnd().Split('\n')
.Where(l=>l.Length>0) //nonempty strings
.Skip(1) // skip header
.Select(s=>s.Trim()) // delete whitespace
.Select(l=>l.Split(',')) // get arrays of values
.Select(l=>new {Field1=l[0],Field2=l[1],Field3=l[2]});
我总是使用这个CSV库通过C读取CSV文件,这对我来说总是很好 下面是使用库读取CSF文件的示例
using System.IO;
using LumenWorks.Framework.IO.Csv;
void ReadCsv()
{
// open the file "data.csv" which is a CSV file with headers
using (CsvReader csv =
new CsvReader(new StreamReader("data.csv"), true))
{
int fieldCount = csv.FieldCount;
string[] headers = csv.GetFieldHeaders();
while (csv.ReadNextRecord())
{
for (int i = 0; i < fieldCount; i++)
Console.Write(string.Format("{0} = {1};",
headers[i], csv[i]));
Console.WriteLine();
}
}
}
使用System.IO;
使用LumenWorks.Framework.IO.Csv;
void ReadCsv()
{
//打开文件“data.csv”,这是一个带有标题的csv文件
使用(CsvReader csv)=
新的CsvReader(新的StreamReader(“data.csv”),真)
{
int fieldCount=csv.fieldCount;
string[]headers=csv.GetFieldHeaders();
而(csv.ReadNextRecord())
{
对于(int i=0;i
尝试在扩展属性中包含IMEX,这将告诉驱动程序您有混合模式数据
Text;HDR=YES;FMT=Delimited;IMEX=1
内置了对读入数据集的支持
:
using (var reader = new CsvReader(@"C:\data.csv")) {
reader.ReadHeaderRecord();
var dataSet = new DataSet();
reader.Fill(dataSet, "csv-data");
}
我发现的最好的选择是,它可以解决安装了不同版本的Office以及32/64位问题 可以使用NuGet将其添加到项目引用中,并提供一个单行程序解决方案:
CommonEngine.CsvToDataTable(path, "ImportRecord", ',', true);
我的解决方案的可能副本与jimscott()相同,但不起作用:S-1。按换行符拆分不是CSV解析的方法。如果是这么简单的话,就不会有任何库了。