2017-04-26 23 views
-1

我試圖從逗號分隔的.txt文件加載數據,並將信息放入2個並行數組中。 .txt文件包含兩列數據,StudentName & StudentGrades。使用拆分方法從逗號分隔的.txt文件加載2個數組C#

它類似於這樣......

莎莉,67
弗蘭克,32
約翰,98

我試圖使用split方法來讀取逗號分隔的文件,但是我已經嘗試了許多不同的方法來使這個工作沒有運氣。我得到的錯誤是「不能隱式地將類型字符串[]轉換爲字符串」

如果我把每個.txt數據放在單獨的行上,並從代碼中刪除拆分方法,它可以正常工作。不過,我需要該文件以逗號分隔。

public static void LoadArray() 
    { 

     StreamReader studentInfoStreamReader = new StreamReader("LittleRecord2.txt"); 

     for (counter = 0; counter < 21; counter++) 
     { 
      if (studentInfoStreamReader.Peek() != -1) // CHECK TO SEE IF END OF FILE 
      { 

       studentName[counter] = (studentInfoStreamReader.ReadLine().Split(',')); // CODE WITH ERROR 
       studentGrade[counter] = Convert.ToInt32(studentInfoStreamReader.ReadLine());   
      } 
     } 

     studentInfoStreamReader.Close(); 
    } 

    public static void OptionOne() 
    { 
     LoadArray(); 

     Console.WriteLine("Student Name".ToString().PadRight(20) + ("Student Grade".ToString().PadRight(5))); 
     Console.WriteLine(); 

     for (int c = 0; c < counter; c++) 
     { 
      Console.WriteLine("{0} {1}", studentName[c].PadRight(20), studentGrade[c].ToString().PadRight(5)); 
     } 


    } 

回答

0

這是因爲string.Split()返回數組,你將其分配給一個標量值。存儲分割結果在一個新的數組變量,然後分別分配它的元素:

public static void LoadArray() 
{ 
    StreamReader studentInfoStreamReader = new StreamReader("LittleRecord2.txt"); 
    for (counter = 0; counter < 21; counter++) 
    { 
     if (studentInfoStreamReader.Peek() != -1) // CHECK TO SEE IF END OF FILE 
     { 
      var splitLine = studentInfoStreamReader.ReadLine().Split(','); 
      studentName[counter] = splitLine[0]; 
      studentGrade[counter] = splitLine[1]; 
     } 
    } 
    studentInfoStreamReader.Close(); 
} 
+0

謝謝你,德米特里。你的解決方案對我來說非常合適我感謝您的幫助 –

0
string[] x = studentInfoStreamReader.ReadLine().Split(','); 
studentName[counter] = x[0]; 
studentGrade[counter] = x[1]; 
1

Split方法返回一個數組。在你使用逗號分割的情況下,它會產生一個包含2個項目的數組。索引0的第一項是名稱,並在索引1的第2項是等級:

var splitParts = (studentInfoStreamReader.ReadLine().Split(',')); 
studentName[counter] = splitParts[0]; 
studentGrade[counter] = Convert.ToInt32(splitParts[1]); 
1

而是平行陣列的,那將是更有效使用的類。另外,除非你的文件有數百萬條目將整個文件讀入內存可能會更快:

class Student 
{ 
    public string name = ""; 
    public int grade = 0; 
    public Student() 
    { 

    } 
} 
List<Student> GetStudents(string fileName) 
{ 
    return (from string line in System.IO.File.ReadAllLines(fileName) 
      let data = line.Split(",".ToArray()) 
      select new Student { name = data[0], grade = int.Parse(data[1]) }).ToList(); 

}