c#如何存储数组中文件的值

时间:2017-04-11 22:40:35

标签: c# arrays

我试图通过从文件中读取来存储数组中的值。我有一个文件部分的读取,但我不能让它存储在数组中因为它给我一个错误“值不能为空”因为在循环后我的变量的值变为null并且数组不能为null。这就是我所拥有的。而且我意识到for循环可能不在正确的位置,所以任何帮助放在哪里都会很棒。

    Program p = new Program();

        int MAX = 50;

        int[] grades = new int[MAX];

        string environment = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "\\";

        string path = environment + "grades.txt";

    StreamReader myFile = new StreamReader(path);

        string input;

        int count = 0;

        do
        {
            input = myFile.ReadLine();
            if (input != null)
            {
                WriteLine(input);
                count++;
            }
        } while (input != null);

        for (int i = 0; i < count; i++)
        {
            grades[i] = int.Parse(input);
        }

4 个答案:

答案 0 :(得分:1)

从while循环退出后立即启动for循环。当输入为空时,退出while循环的条件为true。当然,Int.Parse并没有很好地接受这一点 相反,您可以使用单个循环,考虑到您不想循环超过50次,否则超出数组维度

int count = 0;
while((input = myFile.ReadLine()) != null && count < 50)
{
    WriteLine(input);
    grades[count] = int.Parse(input);
    count++;
}

但是,如果使用List<int>而不是整数数组,则可以使用更灵活的方式来处理输入。这样您就不必检查文件中存在的行数

List<int> grades = new List<int>();
while((input = myFile.ReadLine()) != null)
    grades.Add(int.Parse(input));

答案 1 :(得分:1)

如果我们想要真正浓缩

var grades = File.ReadAllLines(path).Select(l=>Int.Parse(l)).ToArray();

答案 2 :(得分:0)

Program p = new Program();
int MAX = 50;
int[] grades = new int[MAX];
string environment = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "\\";
string path = environment + "grades.txt";
using (StreamReader myFile = new StreamReader(path))
{
    string input;
    int count = 0;
    while((!myFile.EndOfStream) && (count < MAX))
    {
        input = myFile.ReadLine();
        if (!String.IsNullOrWhiteSpace(input))
        {
            WriteLine(input);
            grades[count] = int.Parse(input);
            count++;
        }
    }
}

您绝对应该在流对象周围使用“使用”模式。摆脱for循环,同时保持你的代码和风格。您的问题是您在转到下一行之前没有使用输入值。您只有原始代码中的最后一个值。

答案 3 :(得分:0)

利用Path.Combine()帮助您连接路径。

    string environment = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    String fullPath = Path.Combine(environment, "grades.txt");

    int[] grades = File.ReadAllLines(fullPath).Select(p => int.Parse(p)).ToArray<int>();
    Console.WriteLine(grades);

enter image description here

请参阅https://www.dotnetperls.com/file-readalllines,了解如何使用File.ReadAllLines()非常方便。

我在这里使用LINQ,这有时会简化事情。即使它现在看起来有点吓人。我们读取所有行,然后通过选择每一行并将其转换为整数然后输出整数数组并将其保存到grades来解析结果。