2013-07-31 123 views
2

我試圖找出我可以知道用戶在我的應用程序上的方式,因此我將這些數據保存到文本文件中,但是當嘗試逐行讀取文本文件時,我想通過它放入數組中以更好地比較數據。 所以這裏是我如何做它:爲什麼我不能在c#中爲這個數組賦值?

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

正如你看到的,我宣佈我的數據陣列之前,但它說,它不能使用它會導致未分配。

在此先感謝。

+2

「data」永遠不會被初始化。你的第一個for循環是沒用的。你有什麼錯誤? –

回答

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
String[][] data = new String[][]; 

你需要初始化

+0

這是爲你編譯的嗎? –

2

您沒有初始化與任何數組。也許List<List<string>>可能會更好。

+0

這仍然需要創建並添加內部列表。 – lukegravitt

0

初始化數組有一個空值,就大功告成了

String[][] data = null; 
0

改進你的代碼位。還使用了List的String而不是數組。

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

不編譯... –

0

要創建和填充數組,您需要知道生成的大小。如果您使用LINQ並將陣列創建作爲最後一步,則可以用一條語句將其關閉:

var data = File.ReadLines(Path.Combine(Application.StartupPath, "users.txt")) 
       .Select(line => line.Split('~')) 
       .ToArray(); 
相關問題