2

ユーザーが自分のアプリでオンラインであることを知る方法を見つけようとしています。したがって、このデータをテキスト ファイルに保存していますが、テキスト ファイルを 1 行ずつ読み取ろうとすると、配列に渡したいと思います。データをよりよく比較します。だからここに私がそれを行う方法があります:

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

配列を何も初期化していません。おそらく、 AのList<List<string>>方が良いかもしれません。

于 2013-07-31T20:10:23.677 に答える
0

null値を持つように配列を初期化すれば完了です

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 に答える
0

配列を作成して埋めるには、結果のサイズを知る必要があります。LINQ を使用し、最後のステップとして配列の作成を行う場合、これを 1 つのステートメントで実行できます。

var data = File.ReadLines(Path.Combine(Application.StartupPath, "users.txt"))
               .Select(line => line.Split('~'))
               .ToArray();
于 2013-07-31T20:27:15.717 に答える
-1
String[][] data = new String[][];

初期化する必要があります

于 2013-07-31T20:10:17.980 に答える