导入与文件“”作为分隔符
问题描述:
文件即时试图读取正在寻找这样的:导入与文件“”作为分隔符
123,123,123h123m,123123123
而且我下面的代码尝试读取:
public DataTable DataTableFromTextFile(string location, char delimiter = ',')
{
DataTable result;
string[] LineArray = File.ReadAllLines(path);
result = FormDataTable(LineArray, delimiter);
return result;
}
private static DataTable FormDataTable(string[] LineArray, char delimiter)
{
DataTable dt = new DataTable();
AddColumnToTable(LineArray, delimiter, ref dt);
AddRowToTable(LineArray, delimiter, ref dt);
return dt;
}
private static void AddRowToTable(string[] valueCollection, char delimiter, ref DataTable dt)
{
for (int i = 1; i < valueCollection.Length; i++)
{
string[] values = valueCollection[i].Split(delimiter);
DataRow dr = dt.NewRow();
for (int j = 0; j < values.Length; j++)
{
dr[j] = values[j];
}
dt.Rows.Add(dr);
}
}
private static void AddColumnToTable(string[] columnCollection, char delimiter, ref DataTable dt)
{
string[] columns = columnCollection[0].Split(delimiter);
foreach (string columnName in columns)
{
DataColumn dc = new DataColumn(columnName, typeof(string));
}
}
但它似乎还没有工作。我试图改变一些东西,但它然后去DataGridView(这被称为infoTabelle)添加空格。 任何人都可以帮助我解决我的问题?
****编辑 知道了一切现在。我改变了将分隔文本放入DataGridView的方法。现在的工作就像一个魅力**
答
您正在寻找这样的事情:
// Simple: quotation "..." e.g. "123,456",789 is not implemented
private static DataTable FromCsvSimple(string path, char delimiter = ',') {
// Try avoiding ReadAllLines; use ReadLines
// Where - let's skip empty lines (if any)
var lines = File
.ReadLines(path)
.Where(line => !string.IsNullOrWhiteSpace(line))
.Select(line => line.Split(delimiter));
DataTable result = new DataTable();
foreach (string[] items in lines) {
// Do we have any columns to add?
for (int c = 0; c < items.Length; ++c)
while (c >= result.Columns.Count)
result.Columns.Add();
result.Rows.Add(items);
}
return result;
}
...
DataTable myTable = FromCsvSimple(@"c:\MyCsv.csv", ';');
你什么错误? “似乎不起作用”会使你在这里无处可寻。顺便也欢迎!我建议参加[参观]并阅读[问]。 – Fildor
顺便提一下:'ref DataTable dt' - 为什么你认为'ref'在这里需要? – Fildor
将一些单元测试添加到您的代码中,以确保每个单独的方法按预期工作。分别测试分割和验证DataTable。你甚至从这里得到一个有效的数据表? –