我正在读取并计算文件中的行数,然后使用与行数相同的空格数初始化数组。然后再次读取该文件,并将每一行分配给该阵列的该位置。例如,第一行将存储在索引位置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
}
}
}
}
}
答案 0 :(得分:2)
问题是您没有在任何地方保存增加的i
值。
您可以像这样修改代码:
while ((linefinal = fr.ReadLine()) != null)
{
Console.WriteLine(linefinal);
unenc[i + 1] = linefinal;
Console.WriteLine(unenc[i]);
i++;
}
所以你在评论中的查询是
数组是否会在
的部分中更新i的值unenc[i+1]
?
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);
}
}