/** * ログの本体部分を取得 * <body>~</body> の中の行をすべて取得する * */ private MemLogAreaManager GetLogDataText(StreamReader sr) { MemLogAreaManager manager = new MemLogAreaManager(); while (!sr.EndOfStream) { string line = sr.ReadLine().Trim(); Dictionary <string, string> fields = SplitLineStr(line); if (fields.Count == 0) { continue; } // 終了判定 if (line.Equals("</body>")) { return(manager); } else if (fields.ContainsKey("area")) { MemLogArea area = GetMemAreaText(fields, manager); manager.AddArea(area); } else if (fields.ContainsKey("log")) { MemLogData log = GetMemLogText(fields); manager.AddLogData(log); } } return(null); }
/** * バイナリログデータを読み込む */ private void ReadLogDataBin(UFileStream fs) { MemLogData log = new MemLogData(); // ログID log.ID = fs.GetUInt32(); //ログタイプ bool isRangeEnd = false; LogDataType dataType = (LogDataType)fs.GetByte(); switch (dataType) { case LogDataType.Single: log.Type = MemLogType.Point; break; case LogDataType.RangeStart: log.Type = MemLogType.Range; break; case LogDataType.RangeEnd: // 同じレーンの Range タイプのログに結合する // todo isRangeEnd = true; break; case LogDataType.Value: log.Type = MemLogType.Value; break; } //表示レーンID log.LaneId = fs.GetUInt32(); //タイトルの長さ //タイトル log.Text = fs.GetSizeString(); // 範囲ログの終了タイプの場合、結合する //時間 Double time = fs.GetDouble(); if (log.Type == MemLogType.Range && isRangeEnd == true) { // 1つ前の Rangeタイプの Time2 に時間を設定 // todo return; } else { log.Time1 = time; } //ログデータ(詳細)のサイズ //ログデータ(詳細) if (log.Detail != null) { log.Detail = MemDetailData.Deserialize(fs.GetSizeString()); } // ログを追加する areaManager.AddLogData(log); }