2016-11-13 60 views
-5

我有以下代碼:爲什麼不工作返回C#?

public static Array readCVS(string absolutePath) 
{ 
    string[,] temperatureMatrix = new string[384, 288]; 
    string value; 

    using (TextReader fileReader = File.OpenText(absolutePath)) 
    { 
     var csv = new CsvReader(fileReader); 
     csv.Configuration.HasHeaderRecord = false; 
     int y = 1; 

     while (csv.Read()) 
     { 
      for (int x = 1; csv.TryGetField<string>(x, out value); x++) 
      { 
       x = x - 1; 
       temperatureMatrix[1, 1] = value; 
      } 
      y = y + 1; 
     } 
     return temperatureMatrix; 
    } 
} 

所以return t;不工作,我的意思是它不返回數組,我也試圖在這裏設置斷點,然後我看不到滿陣

+0

請張貼更接近真實代碼的代碼。這裏太多破碎和失蹤。 – usr

+1

你的代碼也有編譯錯誤。首先修復它們 –

+1

請閱讀[mcve]指導並更新所有缺少聲明的帖子中的代碼。否則無法推理你有什麼問題。 –

回答

0

由於史蒂夫指出,你的代碼在許多地方似乎是不正確的。 我想指出一件事,最好使用List而不是Array,因爲如果你有大文件,你會得到索引超出範圍的異常。和List會給你無限的長度。

public static List<string> readCVS(string absolutePath) 
{ 
    List<string> result = new List<string>(); 
    string value; 
    using (TextReader fileReader = File.OpenText(absolutePath)) 
    { 
     var csv = new CsvReader(fileReader); 
     csv.Configuration.HasHeaderRecord = false; 
     while (csv.Read()) 
     { 
      for (int i = 0; csv.TryGetField<string>(i, out value); i++) 
      { 
       result.Add(value); 
      } 
     } 
    } 
    return result; 
} 

我不知道你爲什麼在代碼中使用y。這是沒用的,我們只是在減少它。

1
的結構

看來你的代碼在用於讀取由CsvReader提取的行的列值的for中輸入一個無限循環。

我想你應該改變你的代碼去除x的減量內部for循環(不清除該行的原因,但肯定不允許X推進到輸入行的下一列)。

最後應設置矩陣的正確使用的y(表示行)的值,並且x(對於列)

public static Array readCVS(string absolutePath) 
{ 
    string[,] temperatureMatrix = new string[384, 288]; 
    string value; 
    using (TextReader fileReader = File.OpenText(absolutePath)) 
    { 
     var csv = new CsvReader(fileReader); 
     csv.Configuration.HasHeaderRecord = false; 
     int y = 0; 
     while (csv.Read()) 
     { 
      for (int x = 0; csv.TryGetField<string>(x, out value); x++) 
       temperatureMatrix[x, y] = value; 

      y = y + 1; 
     } 
     return temperatureMatrix; 
    } 
} 

我也改變了初始索引從1到0既爲x和y 。在網絡陣列(也是多維的)中,從索引0開始不是1.

還要警告,這段代碼與您的輸入文件的確切結構非常相關。如果您獲得的文件多於288行,或者單行超過384個單個臨時值,則代碼會因索引超出範圍異常而崩潰。

+0

爲什麼你在這裏調整x,y的位置'temperatureMatrix [y,x]'? – Dev

+0

索引超出了數組的範圍。 – Dev

+0

它取決於文件中有多少行(384或288?)我假設384行,只是改變順序,如果不是這種情況 – Steve

相關問題