C # передать текст файла в список, когда файл вводится через аргумент командной строки - PullRequest
0 голосов
/ 16 ноября 2018

Я пишу программу для задания, которое предназначено для чтения двух текстовых файлов и использования их данных для записи в третий текстовый файл. Мне было поручено передать содержимое одного файла в список. Я сделал нечто подобное, передав содержимое в массив (см. Ниже). Но я не могу заставить его работать со списком.

Вот что я делал в прошлом с массивами:

 StreamReader f1 = new StreamReader(args[0]);
        StreamReader f2 = new StreamReader(args[1]);
        StreamWriter p = new StreamWriter(args[2]);
        double[] array1 = new double[20];
        double[] array2 = new double[20];
        double[] array3 = new double[20];

        string line;
        int index;
        double value;

 while ((line = f1.ReadLine()) != null)
        {
            string[] currentLine = line.Split('|'); 
            index = Convert.ToInt16(currentLine[0]);
            value = Convert.ToDouble(currentLine[1]);
            array1[index] = value;
        }

Если это представляет интерес, это мои текущие настройки:

 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)
        int ID;
        string InvName;
        int Number;

        string IDString; 
        string NumberString;

        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

        //Data is separated by pipe |

Ответы [ 2 ]

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

Если я правильно понимаю, все, что вам нужно сделать, это прочитать два входных файла, проанализировать данные в этом файле в определенном формате (в данном случае int | double) и затем записать его в новый файл.Если это требование, пожалуйста, попробуйте следующий код, так как он не уверен, как вы хотите, чтобы данные были представлены в третьем файле. Я сохранил формат в том виде, в каком он есть (т.е. int | double)

 static void Main(string[] args)
    {

        if (args == null || args.Length < 3)
        {
            Console.WriteLine("Wrong Input");
            return;
        }

        if (!ValidateFilePath(args[0]) || !ValidateFilePath(args[1]))
        {
            return;
        }

        Dictionary<int, double> parsedFileData = new Dictionary<int, double>();

        //Read the first file
        ReadFileData(args[0], parsedFileData);

        //Read second file 
        ReadFileData(args[1], parsedFileData);

        //Write to third file
        WriteFileData(args[2], parsedFileData);
    }

    private static bool ValidateFilePath(string filePath)
    {
        try
        {
            return File.Exists(filePath);
        }
        catch (Exception)
        {
            Console.WriteLine($"Failed to read file : {filePath}");
            return false;
        }
    }

    private static void ReadFileData(string filePath, Dictionary<int, double> parsedFileData)
    {
        try
        {
            using (StreamReader fileStream = new StreamReader(filePath))
            {
                string line;
                while ((line = fileStream.ReadLine()) != null)
                {
                    string[] currentLine = line.Split('|');
                    int index = Convert.ToInt16(currentLine[0]);
                    double value = Convert.ToDouble(currentLine[1]);

                    parsedFileData.Add(index, value);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Exception : {ex.Message}");
        }
    }

    private static void WriteFileData(string filePath, Dictionary<int, double> parsedFileData)
    {
        try
        {
            using (StreamWriter fileStream = new StreamWriter(filePath))
            {
                foreach (var parsedLine in parsedFileData)
                {
                    var line = parsedLine.Key + "|" + parsedLine.Value;
                    fileStream.WriteLine(line);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Exception : {ex.Message}");
        }
    }

Есть несколько вещей, которые вы всегда должны помнить при написании кода на C #:

1) Проверяйте входные данные командной строки перед использованием.

2) Всегда ищите любой класс, имеющий метод dispose,создайте его внутри с помощью блока.

3) Правильный механизм в коде для отлова исключений, иначе ваша программа будет аварийно завершать работу во время выполнения с неверными входными данными или входными данными, которые вы не можете проверить!

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

Если вы хотите преобразовать Array в List, вы можете просто позвонить Add или Insert, чтобы это произошло.

Согласно вашему коду вы можете сделать Inventory.Add(Item).

while ((line = f1.ReadLine()) != null)
{
    string[] currentLine = line.Split('|');
    Item = new InventoryItem {
        Index = Convert.ToInt16(currentLine[0]),
        Value = Convert.ToDouble(currentLine[1])
    };
    Inventory.Add(Item);
}

вот так.

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