C # Преобразование массива в список - PullRequest
0 голосов
/ 16 ноября 2018

Я работаю над заданием, которое касается ввода и вывода файлов. Инструкции следующие:

Напишите программу для обновления файла инвентаря. Каждая строка файла инвентаризации будет иметь номер продукта, название продукта и количество, разделенные вертикальными полосами. Файл транзакции будет содержать номер продукта и сумму изменения, которая может быть положительной для увеличения или отрицательной для уменьшения. Используйте файл транзакции для обновления файла инвентаризации, записав новый файл инвентаря с количествами обновлений. Я предоставил 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;
    }
}

Существует много шагов к этой проблеме, но сейчас меня интересует только то, как прочитать файл инвентаризации в список. Раньше я считывал файлы в массивы, поэтому подумал, что смогу это сделать, а затем преобразовать массив в список. Но я не совсем уверен, как это сделать. Ниже то, что я создал, чтобы добавить к основному методу структуры выше.

        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 голосов
/ 16 ноября 2018

Ты почти у цели.Вы уже получили ID, InvName и Number, поэтому вам просто нужно создать экземпляр InventoryNode:

Item = new InventoryNode(...);

, а затем добавить Item в свой список.

Обратите внимание, что Inventory Node Item = null; - этоне делать много;он просто объявляет переменную, которую вы можете использовать позже.Это не было строго необходимо, поскольку переменная могла быть объявлена ​​внутри цикла.

0 голосов
/ 16 ноября 2018

Нет необходимости добавлять все в массив, а затем преобразовывать его в список.InventoryNode Item = null есть для представления строки из файла.

Ты довольно близко.Вам просто нужно создать экземпляр InventoryNode и передать ему результаты метода split().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...