通过命令行参数输入文件时,C#将文件文本传递给列表

时间:2018-11-16 02:03:20

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

我正在编写一个程序,用于读取两个文本文件,并使用它们的数据写入第三个文本文件。我被指示将一个文件的内容传递给列表。我做过类似的事情,将内容传递给数组(见下文)。但我似乎无法使其与列表配合使用。

这是我过去使用数组所做的事情:

 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 :(得分:1)

如果要将Array转换为List,则只需调用AddInsert即可实现。

根据您的代码,您可以执行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);
}

像这样

答案 1 :(得分:0)

如果我正确理解,您要做的就是读取两个输入文件,以特定格式(在这种情况下为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方法的任何类,并使用block在内部将其实例化。

3)代码中有适当的机制来捕获异常,否则您的程序将在运行时因无效输入或无法验证的输入而崩溃!