2017-08-29 2 views
0

Ich arbeite mit csv-Datei und Datagridview in einem C# -Projekt Ich versuche, eine CSV mit 2 Trennzeichen-Datei zu laden ‚,‘ + '; 'da ist mein Problem! Alles was ich brauche Wort hinter dem Komma außer dem letzten Wort Beispiel.csv zu ignorieren:Last CSV-Datei zu Datagridview und ignoriert Wort mit Begrenzer

my1;;test1;good 
my2;cool;test,abcde;god 
my3;father;zyxw; 
my4;dad;word,fresh,example;banana 

ich in meinem Datagridview wie folgt angezeigt werden soll:

my1;;test1;good 
my2;cool;abcde;god 
my3;father;zyxw; 
my4;dad;example;banana 

Wie Sie kann sehen, mein Ziel ist es, alle Zeile von CSV hinzuzufügen, aber wenn ein Komma erscheint, erhalten Sie das letzte Wort.Soweit ich mit diesem Code:

System.IO.StreamReader fileReader = new System.IO.StreamReader(csvPath, false); 
         string fileRow; 
         string[] fileDataField; 

         //Reading Data 
         while (fileReader.Peek() != -1) 
         { 
          fileRow = fileReader.ReadLine(); 
          fileDataField = fileRow.Split(';'); 
          dataGridView1.Rows.Add(fileDataField); 
         } 
         fileReader.Dispose(); 
         fileReader.Close(); 

Antwort

1

Sie können Linq verwenden, um dies zu lösen. Nur Verweis auf System.Linq hinzufügen und fileDataField wie folgt:

fileDataField = fileRow.Split(';') 
       .Select(e=> e.LastIndexOf(",") >= 0 && e.IndexOf(",") < e.Length 
       ? e.Substring(e.LastIndexOf(",") + 1) 
       : e).ToArray(); 
+0

Perfekt funktioniert, aber ich benutze ein Array zur Behebung dieser habe ich hinzufügen. ToArray() danke für Ihre Hilfe! – Kate

+0

Eigentlich .. das habe ich gemerkt und habe gerade meine Antwort aktualisiert :) –

1
System.IO.StreamReader fileReader = new System.IO.StreamReader(csvPath, false); 
string[] fileDataField; 
string fileRow; 

//Reading Data 
while (fileReader.Peek() != -1) { 
    fileRow = fileReader.ReadLine(); 
    fileDataField = fileRow.Split(';'); 

    //Declare temporary array to temporary store the values 
    string[] tempItems = new string[fileDataField.Length]; 
    //Loop through the array and do comma check, 
    //Cut the string if there's a comma in it 
    //Else just add the normal value 

    for (int i = 0; i < fileDataField.Length; i++) { 
     tempItems[i] = fileDataField[i].Substring(fileDataField[i].LastIndexOf(",") + 1); 
    } 
    dataGridView1.Rows.Add(tempItems); 
} 
fileReader.Dispose(); 
fileReader.Close(); 

Das sollte funktionieren. Sie könnten einfach den Teil der Zeichenkette vor und einschließlich des Kommas abschneiden und den Rest zur Gridview hinzufügen. Wenn kein Komma gefunden wird, wird der Wert ohne Änderung hinzugefügt.

Bearbeiten: Sollte ein Array anstelle einer Liste verwenden.

+0

Dank für Ihre Antwort, aber ich verstehe nicht, wenn ich diesen Code bin Tests und es ist hinzuzufügen: System.Collections.Generic.List'1 [System .String] zu meinem Datagridview, weißt du warum? – Kate

+0

Ich habe die Antwort aktualisiert. Das Problem war das Hinzufügen einer Liste zur GridView, jetzt mit einem Array funktioniert es – rqnn

Verwandte Themen