2017-08-29 3 views
0

私はC#プロジェクト でCSVファイルとのDataGridViewで働いているとの言葉を無視する「」+ ' 'そこに私の問題がある!私は、最後のワードexample.csv以外のコンマの後のすべての単語を無視する必要があります。負荷のcsvファイルはDataGridViewのと私はCSVが2区切り文字でファイルをロードしようと区切り

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

私はこのように私のDataGridViewに表示する:あなたのよう

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

私の目標はCSVからすべての行を追加することですが、の場合はカンマが最後の単語を取得するように見えます。このコードを使用しています。

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

答えて

1

これを解決するにはLinqを使用できます。ただ、System.Linqへの参照を追加し、次のようにfileDataFieldを設定します。あなたの答えのための

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

完全に動作していますが、これを修正するための配列を使用しています。 – Kate

+0

実際..私はそれを実現し、ちょうど私の答えを更新:) –

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

これは動作するはずです。コンマを含む前に文字列の一部を切り捨て、残りをgridviewに追加するだけで済みます。カンマが見つからない場合、値は変更されずに追加されます。

編集: リストの代わりに配列を使用する必要があります。

+0

おかげで、私はこのコードをテストしていたときに私は理解していない、それは追加します:System.Collections.Generic.List'1 [システム.String]私のdatagridviewに、あなたはなぜ知っていますか? – Kate

+0

私は答えを更新しました。問題は、GridViewにListを追加して、配列が動作するようになりました。 – rqnn

関連する問題