2017-08-05 3 views
0

私はいくつかのtxtファイルを読んでいます。 私はそれぞれの行を読んでいます。最後にコレクションに追加してオブジェクトを分割して作成しています。他の要素に基づいてコレクションから要素を取り出す方法は?

SAMPLEファイルの内容:

レコード1、時間、摂氏(℃)(℃)、ハイアラーム、ローアラーム、湿度(%相対湿度)、露 ポイント、シリアルナンバー
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、 2017年2月6日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); 
       } 
      } 
     } 
    } 
} 
012そして、I`mは(例では21.0および19.5)をコレクション内の最高・最低気温を見つける

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

はどのようにすれば、最高および/または最低気温が収集された日付を見つけるのですか?今

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

最大値と最小温度の日付を取得するために簡単になります。

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

その後、別の解析方法を記述します。

+2

ミックスコンテンツの解析とデータ解析 –

+0

可能な重複:[ここ](https://stackoverflow.com/questions/914109/how-to-use-linq-to-select-object-with-minimum-or-maximum-property - 値)、[ここ](https://stackoverflow.com/questions/1101841/linq-how-to-perform-max-on-a-property-of-all-objects-in-a-collection-and- ret)。基本的には、最大値/最小値に関連付けられたオブジェクトを取得し、必要に応じてプロパティを使用する必要があります。 – crazyGamer

答えて

0

このようなあなたのモデルを定義する、ありがとう:

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

ファイルを解析する方法は? – Thomas

+0

@トーマスあなたの問題は何ですか?ファイルを解析できないか、最高温度と最低温度の日付を見つけることができません。 –

+0

IEnumerable型の解析メソッドの使い方を知りませんでした。 – Thomas

関連する問題