2017-08-05 87 views
0

我正在讀取多個txt文件。 我正在閱讀每一行,通過最終添加到集合來拆分和創建一個對象。如何從基於其他元素的集合中檢索元素?

示例文件內容:

記錄1,時間,攝氏度(℃),高溫報警,低溫報警,溼度(%RH),露 點(℃),序列號
1, 02/06/2017 09:26:30,19.5,32.0,7.0,64.0,12.5,11211222
2,02/06/2017 09:31:30,21.0,32.0,7.0,54.5,11.4
3, 02/06/2017 09:36:30,20.5,32.0,7.0,54.5,11.0

List<MagModel> Records = new List<MagModel>(); 

using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text 
File|*.txt", Multiselect = true }) 
{ 
    ofd.InitialDirectory = HelperClass.GetDirectory; 

    if (ofd.ShowDialog() == DialogResult.OK) 
    { 
     foreach (string file in ofd.FileNames) 
     { 
      using (StreamReader reader = new StreamReader(file)) 
      { 
       reader.ReadLine(); 
       if (file.Contains("Record1")) 
       { 
        var lines = from line in reader.Lines() 
           where !string.IsNullOrEmpty(line) 
           select line; 

        foreach (var line in lines) 
        { 
         var result = line.Split(','); 

         MagModel model1 = new MagModel(); 

         model1.magazine = "Record1";         
         model1.date = result[1]; 
         model1.temp = Convert.ToDouble(result[2]); 
         model1.humidity = Convert.ToDouble(result[5]); 
         Records.Add(model1); 

        } 

        MaxMinTemperature.maxTemp = Records.Max(r => r.temp); 
        MaxMinTemperature.minTemp = Records.Min(r => r.temp); 
       } 
      } 
     } 
    } 
} 

然後我真的找到(在本例21.0和19.5)集合內的最高溫度和最低溫度:

MaxMinTemperature.maxTemp = Records.Max(r => r.temp); 
MaxMinTemperature.minTemp = Records.Min(r => r.temp); 

如何找到在哪裏採集的最高和/或最低溫度的日期?

謝謝

+2

請做n ot混合內容分析和數據分析 –

+0

可能的重複:[here](https://stackoverflow.com/questions/914109/how-to-use-linq-to-select-object-with-minimum-or-maximum-property -value),[here](https://stackoverflow.com/questions/1101841/linq-how-to-perform-max-on-a-property-of-all-objects-in-a-collection-and- RET)。實質上,您需要檢索與最大/最小值關聯的對象,並根據需要使用屬性。 – crazyGamer

回答

0

定義你的模型是這樣的:

public class MagModel 
{ 
    public int Record1 { get; set; } 
    public DateTime Time { get; set; } 
    public double Celsius { get; set; } 
    public double HighAlarm { get; set; } 
    public double LowAlarm { get; set; } 
    public double Humidity { get; set; } 
    public double DewPoint { get; set; } 
    public string SerialNumber { get; set; } 
} 

然後編寫單獨的分析方法:

public static IEnumerable<MagModel> ParseFile(string filename) 
{ 
    // put your parsing here 
} 

現在就可以輕鬆搞定的最大和最小溫度的日期:

var input = ParseFile("input.csv"); 
var orderByCelsius = input.OrderBy(m => m.Celsius).ToArray(); 
var minTemperatureDate = orderByCelsius.FirstOrDefault()?.Time; 
var maxTemperatureDate = orderByCelsius.LastOrDefault()?.Time; 
+0

Aleks我該如何解析文件? – Thomas

+0

@Thomas所以​​你的問題是什麼?您無法解析文件,或者無法找到最高和最低溫度的日期? –

+0

我不確定如何使用IEnumerable類型的解析方法。 – Thomas

相關問題