コード例 #1
0
        /// <summary>
        /// 7zipファイルを解凍しながら行単位でパースしつつ、解析イベントを挿入します
        /// </summary>
        /// <param name="archive">7zipの書庫ファイル</param>
        /// <param name="events">解析イベントの一覧</param>
        /// <param name="skip">冒頭のスキップするファイル数</param>
        /// <param name="take">取るファイル数</param>
        public static void AnalyzeAllSevenZipArchives(string archive, LogFileAnalyzeEvents events, int skip = 0, int take = -1)
        {
            var skipremain = skip;
            var takeremain = (take < 0) ? int.MaxValue : take;

            new LogDirectory(archive).Subscribe(
                logFile =>
            {
                if (skipremain > 0)
                {
                    skipremain--;
                    return;
                }
                if (takeremain <= 0)
                {
                    return;
                }
                takeremain--;

                if (events.OnFileLoaded != null)
                {
                    events.OnFileLoaded(logFile, new Event.LogFileEventArgs(logFile));
                }
                logFile.Subscribe(
                    line =>
                {
                    if (events.OnAnalyzing != null)
                    {
                        KCVDBRow row;
                        if (KCVDBRow.TryParse(line, out row))
                        {
                            events.OnAnalyzing(logFile, new Event.RowAnalyzingEventArgs(logFile, row));
                        }
                    }
                },
                    error =>
                {
                    if (events.OnError != null)
                    {
                        events.OnError(logFile, new Event.ExceptionEventArgs(error));
                    }
                },
                    () =>
                {
                    if (events.OnCompleted != null)
                    {
                        events.OnCompleted(logFile, new Event.LogFileEventArgs(logFile));
                    }
                });
            }
                );
        }
コード例 #2
0
 /// <summary>
 /// ファイル形式ごとに必要に応じて解凍しながら読み込み、行単位でパースします
 /// </summary>
 /// <param name="filePath">ファイルのパス</param>
 /// <returns>行単位のパースされたアイテム</returns>
 public static IEnumerable <KCVDBRow> ParseAllLines(string filePath)
 {
     foreach (var l in ReadAllLines(filePath))
     {
         KCVDBRow row;
         if (!KCVDBRow.TryParse(l, out row))
         {
             yield break;
         }
         else
         {
             yield return(row);
         }
     }
 }
コード例 #3
0
        /// <summary>
        /// ファイルインデックスをロード
        /// </summary>
        /// <param name="fileIndexPath"></param>
        /// <returns></returns>
        public static IList <FileIndex> FileIndexLoader(string fileIndexPath)
        {
            var list = new List <FileIndex>();

            foreach (var l in File.ReadAllLines(fileIndexPath))
            {
                KCVDBRow row;
                if (KCVDBRow.TryParse(l, out row))
                {
                    FileIndex index;
                    if (FileIndex.TryParse(l, out index))
                    {
                        list.Add(index);
                    }
                }
            }
            return(list);
        }