导入与文件“”作为分隔符

问题描述:

文件即时试图读取正在寻找这样的:导入与文件“”作为分隔符

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的方法。现在的工作就像一个魅力**

+3

你什么错误? “似乎不起作用”会使你在这里无处可寻。顺便也欢迎!我建议参加[参观]并阅读[问]。 – Fildor

+1

顺便提一下:'ref DataTable dt' - 为什么你认为'ref'在这里需要? – Fildor

+0

将一些单元测试添加到您的代码中,以确保每个单独的方法按预期工作。分别测试分割和验证DataTable。你甚至从这里得到一个有效的数据表? –

您正在寻找这样的事情:

// 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", ';');