如何将我的集合的内容写入CSV文件?

时间:2017-10-05 06:18:31

标签: c# winforms

我做了一些研究但是没有运气,一般来说编程仍然相对较新,任何有关代码效率的提示都非常受欢迎。

那么,在通过我的一个评分函数或更好的逗号分隔的CSV文件运行之后,我将如何将我的集合的内容+等级写入文本文件。

我不断遇到像public func download(_ URLRequest: URLRequestConvertible, destination: Request.DownloadFileDestination) -> Request { return Manager.sharedInstance.download(URLRequest.URLRequest, to: destination) } public func download(resumeData data: Data, destination: Request.DownloadFileDestination) -> Request { return Manager.sharedInstance.download(resumingWith: data, to: destination) } 这样的问题。我知道我可能在这里错过了一步,但我很难弄清楚它是什么。

这是我的列表格式我从CSV文件加载值并分别存储到FirstLastName和MarksValue。

下面是我的评分单选按钮,我设法让他们将我的函数+ FirstLastName和MarksValue的输出打印到一个消息框,以便我认为这是一个开始。

cannot convert from 'string' to string[]

不确定这是多么相关,但这是我的助手类

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

1 个答案:

答案 0 :(得分:0)

好吧,我最终在一个非常基础的层面解决它,它仍有很大的改进空间,期待尝试CsvHelper nuget包。我最初想要的是非常简单,不知道为什么我花了这么长时间才弄明白。

在我的代码盯着我看了一个小时之后,我意识到我需要在我的Marks List中添加第三个值,将我的评分函数的输出添加到我们的列表中。然后我使用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