尽管有关将C# methods
文件转换为DataTable的几个CSV
在线存在,但似乎没有一个复制Excel - Convert Text to Columns
。为了说明我的观点,假设使用以下示例CSV
:
" FIRst row DATA T"
;;
"Excel versus Csharp" ; ; ; ;
; "MA"; "10000"; "20000"; ; "400000";;; ;; ;;;
"SECOND REPORTING"
"1"; "20"; ; "";"";"";"";"";"";"";
一个人期望(在quotes
上最好没有双string
)会在DataTable
中获得:
FIRst row DATA T
Excel versus Csharp
MA 10000 20000 40000 ...
SECOND REPORTING
1 20 ....
方法:
public static DataTable CSVQuoteToDataTable(string
csvFilePath)
{
DataTable csvData = new DataTable();
try
{
string[] seps = { "\";", ";\"" };
char[] quotes = { '\"', ' ' };
string[] colFields = null;
foreach (var line in File.ReadLines(csvFilePath)) % targets unfortunately the 1st row as column of the DataTable
{
var fields = line
.Split(seps, StringSplitOptions.None)
.Select(s => s.Trim(quotes).Replace("\\\"", "\""))
.ToArray();
if (colFields == null)
{
colFields = fields;
foreach (string column in colFields)
{
DataColumn datacolumn = new DataColumn(column);
datacolumn.AllowDBNull = true;
csvData.Columns.Add(datacolumn);
}
}
else
{
for (int i = 0; i < fields.Length; i++)
{
if (fields[i] == "")
{
fields[i] = null;
}
}
csvData.Rows.Add(fields);
}
}
}
catch (Exception ex)
{
}
return csvData;
}
更有效或更有效的方法上的反馈。
谢谢
答案 0 :(得分:0)
我认为您可以使用Nuget扩展LumenWorksCsvReader来完成大部分所需的工作。它将允许您使用除逗号之外的定界符并处理引号(或者,如果选择,则不行)。
https://www.nuget.org/packages/LumenWorksCsvReader/
我看到的唯一问题是可变的列数,在这种情况下,您可能必须在代码中处理它-确定最大列数并使用它。当您尝试读取范围之外的内容时,该程序包将引发异常,并且看起来很笨拙,您可以为此添加try / catch。
裸露的骨头,但是类似的东西应该可以让您入门。
fdescribe