示例#1
0
        /**
         * 1行分のフィールドからエリアデータを取得する
         * @input fields:
         * @output  取得したエリアデータ
         */
        private LogArea GetMemAreaText(Dictionary <string, string> fields, MemLogAreaManager manager)
        {
            LogArea area = new LogArea();

            // area,name:"area1",parent:"root",color=FF000000, image="icon1"

            foreach (KeyValuePair <string, string> kvp in fields)
            {
                if (kvp.Value != null)
                {
                    switch (kvp.Key.ToLower())
                    {
                    case "name":
                        area.Name = kvp.Value;
                        break;

                    case "parent":
                        area.ParentArea = manager.searchArea(kvp.Value);
                        break;

                    case "color":
                        area.Color = Convert.ToUInt32(kvp.Value, 16);
                        break;

                    case "image":
                        area.Image = images.GetImage(kvp.Value);
                        break;
                    }
                }
            }
            return(area);
        }
示例#2
0
        /**
         * ログの本体部分を取得
         * <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"))
                {
                    LogArea area = GetMemAreaText(fields, manager);
                    manager.AddArea(area);
                }
                else if (fields.ContainsKey("log"))
                {
                    LogData log = GetMemLogText(fields);
                    manager.AddLogData(log);
                }
            }

            return(null);
        }
示例#3
0
        /**
         * テキスト形式のログファイルを読み込んでメモリに展開する
         * @input inputFilePath: ログファイルのパス
         * @output : true:成功 / false:失敗
         */
        private bool ReadLogFileText(string inputFilePath)
        {
            bool isHeader = false;

            // まずはヘッダ部分からエンコードタイプを取得する
            encoding = GetEncodingText(inputFilePath);

            using (StreamReader sr = new StreamReader(inputFilePath, encoding))
            {
                // データ種別部分をスキップ
                sr.ReadLine();

                // ヘッダ部分を読み込む <head>~</head>
                while (!sr.EndOfStream)
                {
                    // ファイルを 1 行ずつ読み込む
                    string line = sr.ReadLine().Trim();

                    // <head>の行が見つかるまではスキップ
                    if (isHeader == false)
                    {
                        if (line.Equals("<head>"))
                        {
                            isHeader = true;
                        }
                    }
                    else
                    {
                        if (line.Equals("</head>"))
                        {
                            break;
                        }
                        Dictionary <string, string> fields = SplitLineStr(line, ',', ':');

                        // ヘッダーの読み込みメイン
                        switch (line)
                        {
                        case "<lane>":
                            lanes = GetLanesText(sr);
                            break;

                        case "<logid>":
                            logIDs = GetLogIDsText(sr);
                            break;

                        case "<image>":
                            images = GetIconImagesText(sr);
                            break;
                        }
                    }
                }

                // 本体部分を読み込む
                bool isBody = false;
                while (!sr.EndOfStream)
                {
                    // ファイルを 1 行ずつ読み込む
                    string line = sr.ReadLine().Trim();

                    // <body>を見つけたら本体の取得モードに入る
                    if (!isBody)
                    {
                        if (line.Equals("<body>"))
                        {
                            isBody = true;
                        }
                    }
                    else
                    {
                        areaManager = GetLogDataText(sr);
                    }
                }
            }
            return(true);
        }