2017-10-09 3 views
0

Le fichier im essayant de lire est à la recherche comme ceci:Importation d'un fichier avec « » comme séparateur

123,123,123h123m, 123123123

Et je code suivant pour essayer de lire que:

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)); 
    } 
} 

mais cela ne semble pas encore fonctionner. J'ai essayé de changer certaines choses mais il est ensuite allé ajouter des espaces vides dans le DataGridView (qui s'appelle infoTabelle). Quelqu'un peut-il m'aider à résoudre mon problème?

**** EDIT Tout a été résolu maintenant. J'ai changé la méthode où il était de mettre mon texte séparé dans le DataGridView. Travailler comme un charme maintenant **

+3

Quelles erreurs obtenez-vous? "ne semble pas fonctionner" ne vous mènera nulle part ici sur SO. Et bienvenue au fait! Je recommande de prendre le [tour] et lire [demander]. – Fildor

+1

BTW: 'réf DataTable dt' - pourquoi pensez-vous que le' ref' est nécessaire ici? – Fildor

+0

Ajoutez des tests unitaires à votre code pour vous assurer que chaque méthode fonctionne comme prévu. Tester le fractionnement et vérifier le DataTable séparément. Avez-vous même un DataTable valide? –

Répondre

1

Vous cherchez quelque chose comme ça.

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