读取文件到数组

时间:2014-05-07 18:34:25

标签: c# arrays

我正在读取并计算文件中的行数,然后使用与行数相同的空格数初始化数组。然后再次读取该文件,并将每一行分配给该阵列的该位置。例如,第一行将存储在索引位置0中。我有以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace testProg
{
    class program
    {
        static void main(){
        Console.WriteLine("enter your filename for reading!");

        fileName = Console.ReadLine();
        using (StreamReader rs = new StreamReader(fileName))
        {
            string line2;
            while ((line2 = rs.ReadLine()) != null)
            {
                arraysize = arraysize+1;//this goes through and gets the number of lines
            }

        }
        Console.WriteLine(arraysize);
        string[] unenc = new string[arraysize]; //this creates the array dynamically
        int i = -1;//starts at position -1 then +1 so starts at 0
        using (StreamReader fr = new StreamReader(fileName))
        {
            string linefinal;
            while ((linefinal = fr.ReadLine()) != null)
            {
                Console.WriteLine(linefinal);//this will write the current line
                unenc[i + 1] = linefinal;// this should store the string above in the current position

                Console.WriteLine(unenc[i]);//this should output the same line it does not the index is just empty ? but it should be stored yet it is not     

            }
        }
        }
    }    
}

4 个答案:

答案 0 :(得分:2)

问题是您没有在任何地方保存增加的i值。

您可以像这样修改代码:

while ((linefinal = fr.ReadLine()) != null)
{
    Console.WriteLine(linefinal);

    unenc[i + 1] = linefinal;

    Console.WriteLine(unenc[i]);

    i++;
}

所以你在评论中的查询是

  

数组是否会在unenc[i+1]

的部分中更新i的值

i + 1所做的是返回" i加上1"的值。

如果要增加该值,您有两个选择:

返回值后递增

var oldValue = i++;
var newValue = i;

返回值前递增

var oldValue = i;
var newValue = ++i;

代码优化

您需要两次读取文件才能获得行数,这样您就可以了解数组的大小。 .NET提供了一个可爱的类,它将在这个实例中帮助您:List<>

List<int>int[]的包装器,可以动态管理其内部数组的长度,这意味着在使用数组时,您必须执行此操作:

var array = int[3];
array[0] = 1;
array[1] = 2;
array[3] = 3:

使用List<int>,您只需执行以下操作即可

var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);

使用数组,如果你想添加另一个带有列表的元素,你必须复制到一个更大的数组,这一切都是在你内部完成的。

当然,您仍可以var item = list[3];访问列表。

因此,利用此功能,您可以取消对文件的第一次读取,并继续添加到列表中。

答案 1 :(得分:1)

考虑使用List对象而不是数组。您可以使用Add()方法在阅读时连续添加项目。完成后,您只需调用List对象上的ToArray()方法即可获得所需的数组。您将拥有与每一行匹配的所有索引值。

答案 2 :(得分:0)

该行

unenc[i + 1] = linefinal;

不太对劲。我相信你的意思

unenc[i++] = linefinal;

您的行在循环中不会更改i的值。

答案 3 :(得分:0)

简单的方法是使用ArrayList。请参阅以下代码段

ArrayList lines = new ArrayList();
using (StreamReader rs = new StreamReader(@"C:\Users\vimal\Desktop\test.txt"))
{
     string line = null;
     while ((line = rs.ReadLine()) != null)
     {
        lines.Add(line);
     }
}