2017-10-05 60 views
1

我做了一些研究,但没有运气,还是相对很新的总体规划,对代码效率任何提示都大加赞赏。如何将我的收藏内容写入CSV文件?

那么我将如何去运行它通过我的分级功能中的一个或更好,但一个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

_站在巨人的肩膀上!_ ..并希望巨人不会倒下;) – Fabio

回答

0

嗯,我结束了在一个非常基本的层面解决它,它仍然有很大的提升空间,寻找转发尝试CsvHelper nuget包。我最初想要的东西非常简单,不知道为什么花了我很长时间才弄清楚。

我的一个小时左右的代码盯着后,我意识到我需要到第三值添加到我的商标列表,加入我的配光功能输出到我们的名单。然后我使用StreamWriter将我列表中的每个单独部分写入一个csv文件。

我最初的错误是试图写MarksValue + FirstLastName + V将for-each循环中的一个文本文件,而无需更新列表。

在实现所有这些之后,我取消注释了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