繁体   English   中英

如何将.CSV文件读入类的数组(C#)

[英]How to read a .CSV file into an array of a class (C#)

我正在尝试从.csv文件中提取3个值到名为PizzaOrder的类数组中。 .csv文件是使用同一程序创建的。 我在弄清楚如何将.csv中的值插入PizzaOrder数组时遇到问题。

这是到目前为止的形式的代码:

 public partial class Form1 : Form
{
    PizzaOrder[] pizzaArray = new PizzaOrder[4];

    PizzaOrder[] ReadPizzaArray = new PizzaOrder[4];

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        //this is just creating the values and inserting into the array
        PizzaOrder p1 = new PizzaOrder(12, "Pepperoni", 14.88m);
        PizzaOrder p2 = new PizzaOrder(15, "Mushrooms", 15.69m);
        PizzaOrder p3 = new PizzaOrder(13, "Bacon", 15.33m);
        PizzaOrder p4 = new PizzaOrder(16, "Olives", 17.47m);

        pizzaArray[0] = p1;
        pizzaArray[1] = p2;
        pizzaArray[2] = p3;
        pizzaArray[3] = p4;
    }

    private void btnDisplay_Click(object sender, EventArgs e)
    {
       //this is just displaying the contents of the array in a listbox
        lstOrders.Items.Clear();

        for(int loop = 0; loop < pizzaArray.Length; loop++)
        {
            lstOrders.Items.Add(pizzaArray[loop].ShowOrder());
        }
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
     //this is where the .csv file is being created and saved to
        StreamWriter SavePizza = new StreamWriter("PizzaFile.csv", true);
        try
        {

            for (int loop = 0; loop < pizzaArray.Length; loop++)
            {
                SavePizza.Write(pizzaArray[loop].ShowOrder()+ Environment.NewLine);
            }
        }
        catch(System.Exception)
        {
            MessageBox.Show("A file write error has occured...", "File Error");
        }
        finally
        {
            SavePizza.Close();   
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
      //this is where I am attempting to read from the .csv
        StreamReader ReadPizza = new StreamReader(File.OpenRead("PizzaFile.csv"));
        try
        {

            string input = ReadPizza.ReadToEnd();
            string[] PizzaRead = input.Split(',');

            for (int loop2 = 0; loop2 < ReadPizzaArray.Length; loop2++)
            {
             //this is where I'm trying to insert from the .csv into the array again, where the problem is
                ReadPizzaArray[loop2] = (PizzaRead[0], PizzaRead[1], PizzaRead[2]);

            }

        }
        catch(System.Exception)
        {
            MessageBox.Show("An error occured during the file read...","File Read Error");
        }
        finally
        {
            ReadPizza.Close();
        }
    }
}

PizzaOrder类按该顺序接受int,sting和小数。 .csv中的信息需要这样添加。

任何信息和/指导将不胜感激! 谢谢!

您将需要创建一个新的PizzaOrder对象来执行此操作。 随之,您将需要转换为正确的数据类型。 这是示例代码:

for (int loop2 = 0; loop2 < ReadPizzaArray.Length; loop2++)
        {
            ReadPizzaArray[loop2] = new PizzaOrder(Convert.ToInt32(PizzaRead[0]), PizzaRead[1].ToString(), Convert.ToDecimal(PizzaRead[3]));
        }

与此同时,您应该看看一些编码标准。 局部变量通常不大写。 列表可能比数组更好,因为您不知道不同的CSV文件会有多少个条目。

使用File.ReadAllLines()读取文件,并使用String.Split()和String.Trim():

var lines = File.ReadAllLines("PizzaFile.csv")
List<PizzaOrder> orders = new List<PizzaOrder>();

foreach (var line in lines)
{
    var fields = line.Split(',');
    PizzaOrder order = new PizzaOrder()
    {
        Id = Convert.ToInt32(fields[0].Trim());
        Type = fields[1].Trim();
        // etc.
    }
}

var result = orders.ToArray();

除了oppassum的答案外,似乎您没有在用逗号分隔每行之前将CSV分隔。

        string input = ReadPizza.ReadToEnd();
        string[] lines = input.Split(new[] { Environment.NewLine}, StringSplitOptions.RemoveEmptryEntries);
        foreach (string line in lines)
        {
           string[] PizzaRead = line.Split(',');
           //Insert oppassum's answer here...
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM