2016-07-31 34 views
0

好吧,我有多個文本文件,其中都包含一些基於數字的文本數據。所有的數據都是鏈接的,因此一個文本文件的第一行與另一個文本文件的第一行鏈接,依此類推。我需要能夠搜索一年(其中一個文本文件),並將與該年份鏈接的所有數據輸出到控制檯。作爲要求的一部分,文本文件必須保持獨立。你會如何推薦我走這個? 這是我到目前爲止。搜索多個文本文件的數據

case 8: 
        Console.WriteLine("Year Month WS1_AF WS1_Rain WS1_Sun WS1_TMax WS1_Tmin"); 
        Console.WriteLine(); 
        Console.WriteLine(); 
        string[][] Ws1Data = new[] 
    { 
    File.ReadAllLines(@"\A2Alg\files\Year.txt"), 
    File.ReadAllLines(@"\A2Alg\files\Month.txt"), 
    File.ReadAllLines(@"\A2Alg\files\WS1_AF.txt"), 
    File.ReadAllLines(@"\A2Alg\files\WS1_Rain.txt"), 
    File.ReadAllLines(@"\A2Alg\files\WS1_Sun.txt"), 
    File.ReadAllLines(@"\A2Alg\files\WS1_TMax.txt"), 
    File.ReadAllLines(@"\A2Alg\files\WS1_TMin.txt"), 



    }; 
        int nRows = Ws1Data[0].Length; 
        int nColumns = Ws1Data.Length; 
        string tempString = " "; 
        for (int i = 0; i < nRows; i++) 
        { 
         tempString = " "; 
         for (int j = 0; j < nColumns; j++) 
         { 
          tempString = tempString + Ws1Data[j][i]; 
          tempString = tempString + " "; 
         } 
         Console.WriteLine(tempString); 
        } 

上面的代碼讀取所有的文件,它都輸出成一個陣列,它的工作原理,但我需要的方式,每年搜索,然後輸出鏈接到該年的數據。

+0

所以今年是陣列的第一列'Ws1Data [j] [0]',它是正確的嗎? – 2016-07-31 14:55:50

+0

@MachineLearning yes – GT96

回答

0

這是如何按年篩選。

var filter = Ws1Data.Where(row => row[0] == "2016").ToArray(); 

或以下,如果你有一個轉置矩陣

var filter = Ws1Data.Select((row,i) => row.Where((x,j) => Ws1Data[0][j] == ("2016")).ToArray()).ToArray(); 

從你的輸出代碼的工作,這將是更換

nRows = filter[0].Length; 
nColumns = filter.Length; 
for (int i = 0; i < nRows; i++) 
{ 
    tempString = " "; 
    for (int j = 0; j < nColumns; j++) 
    { 
     tempString = tempString + filter[j][i]; 
     tempString = tempString + " "; 
    } 
    Console.WriteLine(tempString); 
} 

這是一個充滿演示

  string [][] Ws1Data = new string[3][]; 
      Ws1Data[0] = new string[3] { "2015", "2016", "2016" }; 
      Ws1Data[1] = new string[3] { "5asda", "6asda","7asa" }; 
      Ws1Data[2] = new string[3] { "5sdfdf", "6asda","6dsfsdf" }; 
      var filter = Ws1Data.Select((row,i) => row.Where((x,j) => Ws1Data[0][j] == ("2016")).ToArray()).ToArray(); 

      int nRows = Ws1Data[0].Length; 
      int nColumns = Ws1Data.Length; 
      string tempString = " "; 
      for (int i = 0; i < nRows; i++) 
      { 
       tempString = " "; 
       for (int j = 0; j < nColumns; j++) 
       { 
        tempString = tempString + Ws1Data[j][i]; 
        tempString = tempString + " "; 
       } 
       Console.WriteLine(tempString); 
      } 
      Console.WriteLine("Filtered by 2016"); 
      nRows = filter[0].Length; 
      nColumns = filter.Length; 
      for (int i = 0; i < nRows; i++) 
      { 
       tempString = " "; 
       for (int j = 0; j < nColumns; j++) 
       { 
        tempString = tempString + filter[j][i]; 
        tempString = tempString + " "; 
       } 
       Console.WriteLine(tempString); 
      } 

      Console.ReadLine(); 
+0

我得到的字符串[] []沒有包含一個定義,當我將代碼實現到我的代碼中時 – GT96

+0

並不重要,對它進行排序 – GT96

+0

這是什麼意思?您可以使用過濾器而不是Ws1Data來顯示一年:問題是什麼?請解釋一下,謝謝 – 2016-07-31 15:06:47