public byte[] ToByteDAT(DataFileType dataFileType, IReadOnlyList <AnalogChannelInformation> analogInformations) { var result = new byte[DataFileHandler.GetByteCount(this.AnalogValues.Length, this.DigitalValues.Length, dataFileType)]; int analogOneChannelLength = dataFileType == DataFileType.Binary ? 2 : 4; int digitalByteStart = 8 + analogOneChannelLength * this.AnalogValues.Length; System.BitConverter.GetBytes(this.Number).CopyTo(result, 0); System.BitConverter.GetBytes(this.Timestamp).CopyTo(result, 4); switch (dataFileType) { case DataFileType.Binary: this.AnalogsToBinaryDAT(result, analogInformations); break; case DataFileType.Binary32: this.AnalogsToBinary32DAT(result, analogInformations); break; case DataFileType.Float32: this.AnalogsToFloat32DAT(result); break; default: throw new InvalidOperationException("Not supported file type DAT"); } this.DigitalsToDAT(result, digitalByteStart); return(result); }
public static int GetByteCount(int analogsChannelsCount, int digitalChannelsCount, DataFileType dataFileType) { int analogOneChannelLength = dataFileType == DataFileType.Binary ? 2 : 4; return(DataFileHandler.SampleNumberLength + DataFileHandler.TimeStampLength + analogsChannelsCount * analogOneChannelLength + DataFileHandler.GetDigitalByteCount(digitalChannelsCount)); }
public DataFileSample(byte[] bytes, DataFileType dataFileType, int analogCount, int digitalCount) { this.AnalogValues = new double[analogCount]; this.DigitalValues = new bool[digitalCount]; this.Number = System.BitConverter.ToInt32(bytes, 0); this.Timestamp = System.BitConverter.ToInt32(bytes, 4); int digitalByteStart; if (dataFileType == DataFileType.Binary) { for (int i = 0; i < analogCount; i++) { this.AnalogValues[i] = System.BitConverter.ToInt16(bytes, 8 + i * 2); } digitalByteStart = 8 + 2 * analogCount; } else { if (dataFileType == DataFileType.Binary32) { for (int i = 0; i < analogCount; i++) {//TODO add test this.AnalogValues[i] = System.BitConverter.ToInt32(bytes, 8 + i * 4); } } else if (dataFileType == DataFileType.Float32) { for (int i = 0; i < analogCount; i++) {//TODO add test this.AnalogValues[i] = System.BitConverter.ToSingle(bytes, 8 + i * 4); } } digitalByteStart = 8 + 4 * analogCount; } int digitalByteCount = DataFileHandler.GetDigitalByteCount(digitalCount); for (int i = 0; i < digitalCount; i++) { int digitalByteIterator = i / 8; this.DigitalValues[i] = Convert.ToBoolean((bytes[digitalByteStart + digitalByteIterator] >> (i - digitalByteIterator * 8)) & 1); } }
internal void OpenFile(string fullPathToFile) { string path = System.IO.Path.GetDirectoryName(fullPathToFile); string filenameWithoutExtention = System.IO.Path.GetFileNameWithoutExtension(fullPathToFile); string extention = System.IO.Path.GetExtension(fullPathToFile).ToLower(); if (extention == GlobalSettings.ExtensionCFF) { //TODO доделать cff throw new NotImplementedException("*.cff not supported"); } else if (extention == GlobalSettings.ExtensionCFG || extention == GlobalSettings.ExtensionDAT) { this.Configuration = new ConfigurationHandler(System.IO.Path.Combine(path, filenameWithoutExtention + ".cfg")); this.Data = new DataFileHandler(System.IO.Path.Combine(path, filenameWithoutExtention + ".dat"), this.Configuration); } else { throw new InvalidOperationException("Unsupported file extentions. Must be *.cfg, *.dat, *.cff"); } }
internal DataFileHandler(string fullPathToFileDAT, ConfigurationHandler configuration) { int samplesCount = configuration.SampleRates[configuration.SampleRates.Count - 1].LastSampleNumber; this.Samples = new DataFileSample[samplesCount]; if (configuration.DataFileType == DataFileType.Binary || configuration.DataFileType == DataFileType.Binary32 || configuration.DataFileType == DataFileType.Float32) { var fileContent = System.IO.File.ReadAllBytes(fullPathToFileDAT); int oneSampleLength = DataFileHandler.GetByteCount(configuration.AnalogChannelsCount, configuration.DigitalChannelsCount, configuration.DataFileType); for (int i = 0; i < samplesCount; i++) { var bytes = new byte[oneSampleLength]; for (int j = 0; j < oneSampleLength; j++) { bytes[j] = fileContent[i * oneSampleLength + j]; } this.Samples[i] = new DataFileSample(bytes, configuration.DataFileType, configuration.AnalogChannelsCount, configuration.DigitalChannelsCount); } } else if (configuration.DataFileType == DataFileType.ASCII) { var strings = System.IO.File.ReadAllLines(fullPathToFileDAT); //removing empty strings (when *.dat file not following Standard) strings = strings.Where(x => x != string.Empty).ToArray(); for (int i = 0; i < samplesCount; i++) { this.Samples[i] = new DataFileSample(strings[i], configuration.AnalogChannelsCount, configuration.DigitalChannelsCount); } } }