我正在试图找出我可以知道用户在我的应用程序上在线的方式,因此这些数据我将其保存到文本文件中,但是当尝试逐行阅读文本文件时,我想通过它进入数组以更好地比较数据。 所以这就是我的做法:
String folder = Application.StartupPath;
String file = "users.txt";
String str;
String[] strArray;
String[][] data;
int rows = 0;
StreamReader lines = new StreamReader(folder + file);
while ((str = lines.ReadLine()) != null)
{
strArray = str.Split('~');
for (int i = rows; i <= rows; i++)
{
for (int j = 0; j < strArray.Length; j++)
{
data[rows][j] = strArray[j]; // here is the error
}
}
rows++;
}
如您所见,我之前已经声明了我的数据数组,但它表示无法使用它因为未分配。
提前致谢。
答案 0 :(得分:4)
有关错误的解释,您需要查看锯齿状数组。关键是你需要初始化外部数组和内部数组:
int[][] jagged = new int[5][]; // Initialized outer array
jagged[0] = new int[3]; // Initialized an inner array
但是,由于您不知道提前需要多少行,所以应该使用列表:
List<List<String>> data = new List<List<String>>();
while ((str = lines.ReadLine()) != null)
{
data.Add(str.Split('~').ToList());
}
或者,如果您只想要一个列表:
List<String> data = new List<String>();
while ((str = lines.ReadLine()) != null)
{
data.AddRange(str.Split('~'));
}
答案 1 :(得分:2)
您没有使用任何内容初始化数组。也许List<List<string>>
可能更好。
答案 2 :(得分:0)
将数组初始化为空值并完成
String[][] data = null;
答案 3 :(得分:0)
稍微改进了你的代码。还使用了List of String而不是array。
String folder = Application.StartupPath;
String file = "users.txt";
String str;
var strings = new List<string>();
int row = 0;
using (var reader = new StreamReader(Path.Combine(folder,file))
{
while ((str = reader.ReadLine()) != null)
{
var splitArray = str.Split('~');
foreach (var str in splitArray)
{
strings.Add(str);
}
}
}
答案 4 :(得分:0)
要创建并填充数组,您需要知道结果大小。如果您使用LINQ并将数组创建作为最后一步,则可以在一个语句中将其关闭:
var data = File.ReadLines(Path.Combine(Application.StartupPath, "users.txt"))
.Select(line => line.Split('~'))
.ToArray();
答案 5 :(得分:-1)
String[][] data = new String[][];
你需要初始化它