2017-10-05 12 views
1

私はいくつかの研究をしましたが、運が悪い、まだ一般的にはプログラミングに比較的新しい、コード効率に関するヒントは非常に高く評価されています。私のコレクションの内容をCSVファイルに書き込む方法は?

私の採点機能の1つ、またはCSVファイルをコンマで区切って実行した後で、コレクションのコンテンツ+グレードをテキストファイルに書き込むにはどうすればいいですか?

cannot convert from 'string' to string[]のような問題が発生し続けています。私はおそらくここで一歩足りないと知っていますが、私はそれが何であるかを理解するのに苦労しています。

これは私のリスト形式です。CSVファイルから値を読み込み、FirstLastNameとMarksValueにそれぞれ格納します。

私のグレーディングのラジオボタンの下に、私は自分のファンクション+ FirstLastNameとMarksValueの出力をメッセージボックスに表示して、それが私の考えであると考えました。

public class Marks 
{  
    public string FirstLastName { get; set; } 
    public int MarksValue { get; set; } 
    //public string mySecondaryGrade { get; set; } 
} 

private void buttongradeStart_Click(object sender, RoutedEventArgs e) 
{ 
    // This runs through an if statement based on my radio buttons. 
    //Testing that radio buttons work with my if else if statements 
    // will change values to my grade function later 
    Grade grader = new Grade(); 
    VET vetGrader = new VET(); 
    PolyOveride overideVet = new PolyOveride(); 
    Helper myhelperArray = new Helper(); 
    string v; 

    //This is a check to see if any data has been loaded. 
    if (dLoad == true) 
    { 

     //var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
     System.Windows.Forms.SaveFileDialog saveDialogue = new System.Windows.Forms.SaveFileDialog(); 
     saveDialogue.Title = "Save File"; 
     saveDialogue.FileName = "Graded-Assessment1.csv"; 
     saveDialogue.Filter = "CSV Files(*.csv)|*.csv|Text Files(*.txt)|*.txt|All files(*.*)|*.*"; 
     saveDialogue.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
     if (saveDialogue.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      var path = saveDialogue.FileName; 
      if (radioCollegeGrade.IsChecked == true) 
      { 
       foreach (Marks mMarks in myhelperArray) 
       { 
        File.WriteAllLines(path, v); 
        v = grader.CollegeGrade(mMarks.MarksValue); 
         System.Windows.Forms.MessageBox.Show(mMarks.FirstLastName + " " + mMarks.MarksValue + " " + v); 
        //System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.csv"); 
        //file.WriteLine(mMarks.FirstLastName + " " + mMarks.MarksValue + " " + v); 
        //file.Close(); 
       } 
      } 
      else if (radioVetGrade.IsChecked == true) 
      { 
       foreach (Marks mMarks in myhelperArray) 
       { 
        v = vetGrader.VETGrade(mMarks.MarksValue); 
         System.Windows.Forms.MessageBox.Show(mMarks.FirstLastName + " " + mMarks.MarksValue + " " + v); 
       } 
      } 
      else if (radioCompetency.IsChecked == true) 
      { 
       foreach (Marks mMarks in myhelperArray) 
       { 
        v = overideVet.VETGrade(mMarks.MarksValue); 
         System.Windows.Forms.MessageBox.Show(mMarks.FirstLastName + " " + mMarks.MarksValue + " " + v); 
       } 
      } 
      else 
      { 
       System.Windows.Forms.MessageBox.Show("I am not sure how you deslected a box!, you should probably select an option."); 
      } 
     } 
     else 
     { 
      System.Windows.Forms.MessageBox.Show("Placeholder Message"); 
     } 
    } 
    else 
    { 
     System.Windows.Forms.MessageBox.Show("You have not selected a file for grading"); 
    } 
} 

これがどのように関連するわからないが、これは私のヘルパークラスである

public class Helper 
{ 
    public static List<Marks> arrayCSV = new List<Marks>(); 
    public IEnumerator<Marks> GetEnumerator() { return arrayCSV.GetEnumerator(); } 

} 
+3

私はCsvHelper nugetパッケージを使用することをお勧めします - 例についてhttps://joshclose.github.io/CsvHelper/を参照してください。あなた自身のcsv出力を書くことは単純明快ですが、多くの問題があります。たとえば、ユーザー名にカンマがある場合はどうなりますか?巨人の肩に立つ! – tofutim

+0

そこに書類の良いビット、仲間、ありがとう。 –

+0

_Standand巨人の肩の上に!_そして巨人が落ちないようにする;) – Fabio

答えて

0

まあ、私は非常に基本的なレベルでそれを解決してしまった、それはまだ見て、改善の余地がたくさんありますCsvHelperナゲットパッケージを試してみましょう。私が最初に望んでいたのは、とてもシンプルだったのですが、それがなぜわかりづらいかわかりませんでした。

私のコードを1時間ほどスタウリングした後、マークリストに3番目の値を追加し、私の評価関数の出力をリストに追加する必要があることに気付きました。私はStreamWriterを使ってリストの各部分をcsvファイルに書き出しました。

私の最初の間違いは、リストを更新せずにfor-eachループ内のテキストファイルにMarksValue + FirstLastName + vを書き込もうとしていました。

これをすべて実現した後、私はすでにリスト内の値だったmySecondaryGradeのコメントを外し、文字列vの内容をmySecondaryGradeに保存しました。まだ例外処理と整理が少しありますが、それを動作させて結果を出すことは良いことです。

public class Marks 
{  
    public string FirstLastName { get; set; } 
    public int MarksValue { get; set; } 
    public string mySecondaryGrade { get; set; } 
} 

private void buttongradeStart_Click(object sender, RoutedEventArgs e) 
    { 
     // This runs through an if statement based on my radio buttons. 
     //Testing that radio buttons work with my if else if statements 
     // will change values to my grade function later 
     Grade grader = new Grade(); 
     VET vetGrader = new VET(); 
     Marks secMarks = new Marks(); 
     PolyOveride overideVet = new PolyOveride(); 
     Helper myhelperArray = new Helper(); 

     //string x; 
     if (dLoad == true) 
     { 

      //var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
      System.Windows.Forms.SaveFileDialog saveDialogue = new System.Windows.Forms.SaveFileDialog(); 
      saveDialogue.Title = "Save File"; 
      saveDialogue.FileName = "Graded-Assessment1.csv"; 
      saveDialogue.Filter = "CSV Files(*.csv)|*.csv|Text Files(*.txt)|*.txt|All files(*.*)|*.*"; 
      saveDialogue.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
      if (saveDialogue.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { 
       //var mySecondaryGrade = secMarks.mySecondaryGrade; 
       //IMPORTANT I NEED TO ADD THE GRADE OUTPUT TO MY LIST AND NOT JUST DISPLAY OUTPUT IN TEXTBOX 
       string v; 
       if (radioCollegeGrade.IsChecked == true) 
       { 
        foreach (Marks mMarks in myhelperArray) 
        { 
         v = grader.CollegeGrade(mMarks.MarksValue);        
         System.Windows.Forms.MessageBox.Show(mMarks.FirstLastName + " " + mMarks.MarksValue + " " + v); 
         mMarks.mySecondaryGrade = v; 
         //dataGridMarks.Columns[3] = mMarks.mySecondaryGrade; 
        } 

        using (var writer = new StreamWriter(saveDialogue.FileName)) 
        { 
         foreach (Marks writeMarks in myhelperArray) 
         { 
          writer.WriteLine(writeMarks.FirstLastName + "," + writeMarks.MarksValue + "," + writeMarks.mySecondaryGrade); 
         } 
        } 

       } 
       else if (radioVetGrade.IsChecked == true) 
       { 
        foreach (Marks mMarks in myhelperArray) 
        { 
         v = vetGrader.VETGrade(mMarks.MarksValue); 
         System.Windows.Forms.MessageBox.Show(mMarks.FirstLastName + " " + mMarks.MarksValue + " " + v); 
         mMarks.mySecondaryGrade = v; 
        } 

        using (var writer = new StreamWriter(saveDialogue.FileName)) 
        { 
         foreach (Marks writeMarks in myhelperArray) 
         { 
          writer.WriteLine(writeMarks.FirstLastName + "," + writeMarks.MarksValue + "," + writeMarks.mySecondaryGrade); 
         } 
        } 
       } 
       else if (radioCompetency.IsChecked == true) 
       { 
        foreach (Marks mMarks in myhelperArray) 
        { 
         v = overideVet.VETGrade(mMarks.MarksValue); 
         System.Windows.Forms.MessageBox.Show(mMarks.FirstLastName + " " + mMarks.MarksValue + " " + v); 
         mMarks.mySecondaryGrade = v; 
        } 

        using (var writer = new StreamWriter(saveDialogue.FileName)) 
        { 
         foreach (Marks writeMarks in myhelperArray) 
         { 
          writer.WriteLine(writeMarks.FirstLastName + "," + writeMarks.MarksValue + "," + writeMarks.mySecondaryGrade); 
         } 
        } 
       } 
       else 
       { 
        System.Windows.Forms.MessageBox.Show("I am not sure how you deslected a box!, you should probably select an option."); 
       } 
      } 
      else 
      { 
       System.Windows.Forms.MessageBox.Show("Placeholder Message"); 
      } 
     } 
     else 
     { 
      System.Windows.Forms.MessageBox.Show("You have not selected a file for grading"); 
     } 
    } 

Result

関連する問題