2

我试图找出我可以知道用户在我的应用程序上在线的方式,因此我将这些数据保存到文本文件中,但是当尝试逐行读取文本文件时,我想将它传递到数组中更好地比较数据。所以这就是我的做法:

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++;
}

如您所见,我之前声明了我的数据数组,但它说它不能使用它,因为未分配。

提前致谢。

4

6 回答 6

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('~'));
}
于 2013-07-31T20:12:48.307 回答
2

您没有用任何东西初始化数组。也许aList<List<string>>可能会更好。

于 2013-07-31T20:10:23.677 回答
0

要创建和填充数组,您需要知道结果大小。如果您使用 LINQ 并将数组创建作为最后一步,则可以在单个语句中完成此操作:

var data = File.ReadLines(Path.Combine(Application.StartupPath, "users.txt"))
               .Select(line => line.Split('~'))
               .ToArray();
于 2013-07-31T20:27:15.717 回答
0

将数组初始化为空值,您就完成了

String[][] data = null;
于 2013-07-31T20:12:20.310 回答
0

稍微改进了你的代码。还使用了字符串列表而不是数组。

    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);
        }
    }
    }
于 2013-07-31T20:14:35.913 回答
-1
String[][] data = new String[][];

你需要初始化它

于 2013-07-31T20:10:17.980 回答