C#将数组转换为列表

时间:2018-11-16 16:29:02

标签: c# arrays list file-io command-line

我正在从事一项处理文件输入和输出的任务。说明如下:

编写程序以更新清单文件。库存文件的每一行都有一个产品编号,一个产品名称和一个数量,并用竖线分隔。交易文件将包含一个产品编号和一个更改量,对于增加可能为正,对于减少可能为负。使用事务文件更新库存文件,并使用更新数量写入新的库存文件。我提供了2个用于测试程序的输入文件以及一个示例输出文件,以便您查看完成后的外观。

提示:

  1. 此程序需要3个文件 初始库存文件 显示要进行的更新的文件 完成更改的新库存文件
  2. 使用列表捕获​​数据,因此您不必担心文件中的项目数量

库存文件的每一行看起来像这样:

123 |电视| 17

我还得到了程序的基本结构和概述:

class Program
{
    public class InventoryNode
    {
     // Create variables to hold the 3 elements of each item that you will read from the file
     // Make them all public 

        public InventoryNode()
        {
         // Create a constructor that sets all 3 of the items to default values
        }

        public InventoryNode(int ID, string InvName, int Number)
        {
         // Create a constructor that sets all 3 of the items to values that are passed in          
 }

        public override string ToString()   // This one is a freebie
        {
            return IDNumber + " | " + Name + " | " + Quantity;
        }
    }

    static void Main(String[] args)
    {
 // Create variables to hold the 3 elements of each item that you will read from the file
 // Create variables for all 3 files (2 for READ, 1 for WRITE)

        List<InventoryNode> Inventory = new List<InventoryNode>();
        InventoryNode Item = null;

 // Create any other variables that you need to complete the work

        // Check for proper number of arguments
            // If there are not enough arguments, give an error message and return from the program
     // Otherwise
            // Open Output File
            // Open Inventory File (monitor for exceptions)
            // Open Update File (monitor for exceptions)
            // Read contents of Inventory into the Inventory List
            // Read each item from the Update File and process the data
            // Write output file

        //Close all files

        return;
    }
}

解决此问题有很多步骤,但是现在我只真正关心如何将清单文件读入列表。我之前已经将文件读入数组,所以我认为可以这样做,然后将数组转换为列表。但是我不确定如何做到这一点。下面是我创建的要添加到上面结构的main方法中的内容。

        int ID;
        string InvName;
        int Number;

        string line; 

        List<InventoryNode> Inventory = new List<InventoryNode>();
        InventoryNode Item = null;

        StreamReader f1 = new StreamReader(args[0]);
        StreamReader f2 = new StreamReader(args[1]);
        StreamWriter p = new StreamWriter(args[2]);


        // Read each item from the Update File and process the data
        while ((line = f1.ReadLine()) != null)
        {
            string[] currentLine = line.Split('|');
            {

                ID = Convert.ToInt16(currentLine[0]);
                InvName = currentLine[1];
                Number = Convert.ToInt16(currentLine[2]);

            }

        }

我有点挂在Inventory Node Item = null;行上。我不确定这应该做什么。我真的只想将文件读取到数组中,以便可以对其进行解析,然后将该数据传递到列表中。有没有办法做到这一点,类似于我编写的代码块?也许有一种更简单的方法。我对此持开放态度,但我认为我会展示自己的思路。

2 个答案:

答案 0 :(得分:0)

不需要将所有内容添加到数组,然后将其转换为列表。 InventoryNode Item = null代表文件中的一行。

您非常接近。您只需要实例化InventoryNode并向其提供split()方法的结果。

答案 1 :(得分:0)

您快到了。您已经获取了ID,InvName和Number,因此只需实例化InventoryNode:

Item = new InventoryNode(...);

然后将Item添加到列表中。

请注意,Inventory Node Item = null;做得并不多;它只是声明一个变量,您以后可以使用。这不是严格必要的,因为可以在循环内声明该变量。