Exemplo n.º 1
0
        public bool CanParse(string filePath, DateTime fileCreationTime)
        {
            string directory       = FilePath.GetDirectoryName(filePath);
            string rootFileName    = FilePath.GetFileNameWithoutExtension(filePath);
            string controlFileName = Path.Combine(directory, rootFileName + ".ctl");

            if (!File.Exists(controlFileName))
            {
                return(false);
            }

            try
            {
                m_parser             = new CorrectiveParser();
                m_parser.ControlFile = new ControlFile(controlFileName);
                m_parser.FileName    = filePath;
                m_parser.OpenFiles();
            }
            catch (IOException)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 2
0
        // Shamelessly copy pasted from the XDAWaveFormDataParser
        // Thanks other Stephen
        private void ParseEMAX(string controlFileName)
        {
            try
            {
                DateTime?startTime = null;
                DateTime timestamp;

                using (CorrectiveParser parser = new CorrectiveParser())
                {
                    parser.ControlFile = new ControlFile(controlFileName);
                    parser.FileName    = m_currentFilePath;

                    // Open EMAX data file
                    parser.OpenFiles();

                    // Parse EMAX control file into channels
                    m_channels = parser.ControlFile.AnalogChannelSettings.Values
                                 .Select(channel => new ParsedChannel()
                    {
                        Index      = Convert.ToInt32(channel.chanlnum),
                        Name       = channel.title,
                        TimeValues = new List <DateTime>(),
                        XValues    = new List <object>(),
                        YValues    = new List <object>()
                    })
                                 .OrderBy(channel => channel.Index)
                                 .ToList();

                    // Read values from EMAX data file
                    while (parser.ReadNext())
                    {
                        timestamp = parser.CalculatedTimestamp;

                        // If this is the first frame, store this frame's
                        // timestamp as the start time of the file
                        if ((object)startTime == null)
                        {
                            startTime = timestamp;
                        }

                        // Read the values from this frame into
                        // x- and y-value collections for each channel
                        for (int i = 0; i < m_channels.Count; i++)
                        {
                            m_channels[i].TimeValues.Add(timestamp);
                            m_channels[i].XValues.Add(timestamp.Subtract(startTime.Value).TotalSeconds);
                            m_channels[i].YValues.Add(parser.CorrectedValues[i]);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                e.Source = m_currentFileRootName;
                ExceptionList.Add(e);
            }
        }
Exemplo n.º 3
0
 public void Dispose()
 {
     if (!m_disposed)
     {
         try
         {
             if ((object)m_parser != null)
             {
                 m_parser.Dispose();
                 m_parser = null;
             }
         }
         finally
         {
             m_disposed = true;
         }
     }
 }
Exemplo n.º 4
0
        private void EMAXButton_Click(object sender, EventArgs e)
        {
            string directory;
            string rootFileName;
            string controlFileName;

            DateTime?startTime = null;
            DateTime timestamp;

            using (OpenFileDialog dialog = new OpenFileDialog())
            {
                dialog.Filter = "EMAX Files|*.rcd;*.rcl|All Files|*.*";
                dialog.Title  = "Browse EMAX Files";

                if (dialog.ShowDialog() == DialogResult.Cancel)
                {
                    return;
                }

                if (!File.Exists(dialog.FileName))
                {
                    return;
                }

                // EMAX parsing will require a CTL file, make sure this exists...
                directory       = Path.GetDirectoryName(dialog.FileName) ?? string.Empty;
                rootFileName    = FilePath.GetFileNameWithoutExtension(dialog.FileName);
                controlFileName = Path.Combine(directory, rootFileName + ".ctl");

                if (!File.Exists(controlFileName))
                {
                    return;
                }

                using (CorrectiveParser parser = new CorrectiveParser())
                {
                    parser.ControlFile = new ControlFile(controlFileName);
                    parser.FileName    = dialog.FileName;

                    // Open EMAX data file
                    parser.OpenFiles();

                    // Parse EMAX control file into channels
                    m_channels = parser.ControlFile.AnalogChannelSettings.Values
                                 .Select(channel => new ParsedChannel()
                    {
                        Index      = Convert.ToInt32(channel.chanlnum),
                        Name       = channel.title,
                        TimeValues = new List <DateTime>(),
                        XValues    = new List <object>(),
                        YValues    = new List <object>()
                    })
                                 .OrderBy(channel => channel.Index)
                                 .ToList();

                    // Read values from EMAX data file
                    while (parser.ReadNext())
                    {
                        timestamp = parser.CalculatedTimestamp;

                        // If this is the first frame, store this frame's
                        // timestamp as the start time of the file
                        if ((object)startTime == null)
                        {
                            startTime = timestamp;
                        }

                        // Read the values from this frame into
                        // x- and y-value collections for each channel
                        for (int i = 0; i < m_channels.Count; i++)
                        {
                            m_channels[i].TimeValues.Add(timestamp);
                            m_channels[i].XValues.Add(timestamp.Subtract(startTime.Value).TotalSeconds);
                            m_channels[i].YValues.Add(parser.CorrectedValues[i]);
                        }
                    }
                }

                // Clear the list box and data chart
                ChannelListBox.Items.Clear();
                DataChart.Series.Clear();

                // Populate the list box with channel names
                ChannelListBox.Items.AddRange(m_channels
                                              .Select(channel => string.Format("[{0}] {1}", channel.Index, channel.Name))
                                              .Cast <object>()
                                              .ToArray());

                // Select the first channel in the list
                ChannelListBox.SelectedIndex = 0;

                // Change the title text of the window to show what file the user has open
                m_fileName = dialog.SafeFileName;
                Text       = string.Format("EMAX - [{0}]", dialog.SafeFileName);
            }
        }