void ReadHeader(TelematicsLog log, string[] lines)
        {
            foreach (string line in lines)
            {
                if (ContainsOpenTag(line, TelematicsLog.StartFlowsLabel))
                {
                    break;
                }

                if (ContainsOpenTag(line, TelematicsLog.FileVersionLabel))
                {
                    log.FileVersion = ReadVersionAttribute(line, TelematicsLog.FileVersionLabel);
                }
                else if (ContainsOpenTag(line, TelematicsLog.FactoryIdLabel))
                {
                    log.FactoryId = ReadStringAttribute(line, TelematicsLog.FactoryIdLabel);
                }
                else if (ContainsOpenTag(line, TelematicsLog.StorageIntervalLabel))
                {
                    log.StorageInterval = ReadIntegerAttribute(line, TelematicsLog.StorageIntervalLabel);
                }
                else if (ContainsOpenTag(line, LogMeterMeter.UnitLabel))
                {
                    log.Unit = ReadStringAttribute(line, TelematicsLog.UnitLabel);
                }
                else if (ContainsOpenTag(line, TelematicsLog.StartDateTimeLabel))
                {
                    log.StartDateTime = ReadDateTimeAttribute(line, TelematicsLog.StartDateTimeLabel);
                }
            }
        }
        public TelematicsLog ReadHeader(string dataSource)
        {
            try {
                log = new TelematicsLog(dataSource);

                string[] lines = System.IO.File.ReadAllLines(dataSource);

                log.FileName = dataSource;

                ReadHeader(log, lines);

                log.FirstCounter = GetFirstCounter(lines);
                log.LastCounter  = GetLastCounter(lines);

                return(log);
            } catch (System.Data.OleDb.OleDbException ex) {
                if (ex.Message.Contains("Could not find file"))
                {
                    throw new Exception("Could not find file");
                }
                else
                {
                    throw;
                }
            }
        }
        List <Discontinuity> GetDiscontinuities(string dataSource)
        {
            log = new TelematicsLog(dataSource);

            string[] lines = System.IO.File.ReadAllLines(dataSource);

            var discontinuities = new List <Discontinuity>();

            int  previousCounter = 0;
            int  currentCounter  = 0;
            bool firstTime       = true;

            Discontinuity discontinuity = null;

            for (int i = 0; i < lines.Length; i++)
            {
                if (ContainsOpenTag(lines[i], TelematicsLog.CounterLabel))
                {
                    if (firstTime)
                    {
                        currentCounter = int.Parse(ReadAttributeValue(lines[i]));
                        firstTime      = false;
                    }
                    else
                    {
                        previousCounter = currentCounter;
                        currentCounter  = int.Parse(ReadAttributeValue(lines[i]));
                        if (currentCounter != previousCounter + 1 && discontinuity == null)
                        {
                            discontinuity = new Discontinuity();
                            discontinuity.CounterStart = currentCounter;
                        }
                        else if (currentCounter == previousCounter + 1 && discontinuity != null)
                        {
                            discontinuity.CounterEnd = currentCounter;
                            discontinuities.Add(discontinuity);
                            discontinuity = null;
                        }
                    }
                }
            }
            return(discontinuities);
        }
        public override Log Load(string dataSource)
        {
            try {
                log = new TelematicsLog(dataSource);

                string[] lines = System.IO.File.ReadAllLines(dataSource);

                log.FileName = dataSource;

                ReadHeader(log, lines);

                log.StartTime = GetStartTime(log.FileName);
                if (log.StartTime == DateTime.MinValue)
                {
                    log.StartTime = log.StartDateTime;
                }

                lastCounterFlow = GetLastCounter(lines);

                log.Flows = ReadFlows(lines, log.StartTime, TimeSpan.FromSeconds(log.StorageInterval), log.ConversionFactorFromCubicMetersToGallons);

                if (log.Flows.Count > 0)
                {
                    log.EndTime = log.Flows[log.Flows.Count - 1].EndTime;
                }

                log.Update();
                return(log);
            } catch (System.Data.OleDb.OleDbException ex) {
                if (ex.Message.Contains("Could not find file"))
                {
                    throw new Exception("Could not find file");
                }
                else
                {
                    throw;
                }
            }
        }