无法将整数的文本文件读入整数数组

时间:2019-04-03 16:41:25

标签: c# winforms

这实际上使我发疯,因为某些原因,我的代码无法将一个简单的int文本文件读取为int数组。

private void HardButton_Click(object sender, EventArgs e)
    {
        int[] hard1 = { };
        int counter = 0;


        using (StreamReader inFile = new StreamReader("h1.txt"))
        {
            string str = null;

            while ((str = inFile.ReadLine()) != null)
            {
                hard1[counter] = Convert.ToInt32(str);
                counter++;
            }
        }

hard1是一个整数数组,我需要通过读取文本文件来保存放入其中的每个整数。我的错误是即使我每次遍历循环,我的数组也超出范围。我很茫然。

编辑:这是输入的txt文件

0502090
6070203
0502010
5020101
0503010
4020905
0608070

7582391
6478283
8592914
5628191
6573812
4728915
3648271

3 个答案:

答案 0 :(得分:4)

C#/。Net具有实际数组,而不是您在许多其他语言中看到的伪数组集合(它也具有这些数组,它只是不尝试将它们作为数组传递出去)。实数组的一个属性是固定大小

因此,当您这样声明数组时:

int[] hard1 = { };

您拥有的是一个固定为大小为0的数组,因此稍后将其分配给该数组:

hard1[counter] = Convert.ToInt32(str);

没有分配给任何地方。

您有很多解决方案。这是其中之一:

private void HardButton_Click(object sender, EventArgs e)
{
    var result = File.ReadLines("h1.txt").
         Where(line => !string.IsNullOrWhitespace(line)).
         Select(line => int.Parse(line)).
         ToArray();
}

答案 1 :(得分:1)

如果您事先不知道长度,请使用列表。

private void HardButton_Click(object sender, EventArgs e)
{
    var hard1 = new List<int>();
    int counter = 0;


    using (StreamReader inFile = new StreamReader("h1.txt"))
    {
        string str = null;

        while ((str = inFile.ReadLine()) != null)
        {
            hard1.Add(Convert.ToInt32(str));
            counter++;
        }
    }
...

如果您无法完全控制文件,则在转换为int之前可能还需要进行额外的控制。

  • 每一行都是一个整数吗?
  • 我需要修剪吗?
  • 可以有空行吗?

答案 2 :(得分:0)

使用此:

private void button1_Click(object sender, EventArgs e)
{
    int[] hard1 = { };

    var lines = File.ReadAllLines("h1.txt");
    var lineWithoutEmptySpace = lines.Where(x => !string.IsNullOrEmpty(x)).ToArray();
    hard1 = new Int32[lineWithoutEmptySpace.Length];

    for (var i = 0; i < lineWithoutEmptySpace.Length; i++)
    {
        hard1[i] = Convert.ToInt32(lineWithoutEmptySpace[i]);
    }
}