Esempio n. 1
0
        protected override void OnWrite(ChannelContextGroup contextGroup, ulong fileOffset, ulong bufferOffset, ulong length)
        {
            var projectDescription = this.DataWriterContext.ProjectDescription;
            var dataFilePath       = Path.Combine(this.DataWriterContext.DataDirectoryPath, $"{projectDescription.PrimaryGroupName}_{projectDescription.SecondaryGroupName}_{projectDescription.ProjectName}_V{projectDescription.Version }_{_lastFileStartDateTime.ToString("yyyy-MM-ddTHH-mm-ss")}Z_{contextGroup.SampleRate.SamplesPerDay}_samples_per_day.csv");

            if (length <= 0)
            {
                throw new Exception(ErrorMessage.CsvWriter_SampleRateTooLow);
            }

            var simpleBuffers = contextGroup.ChannelContextSet.Select(channelContext => channelContext.Buffer.ToSimpleBuffer()).ToList();

            using (StreamWriter streamWriter = new StreamWriter(File.Open(dataFilePath, FileMode.Append, FileAccess.Write)))
            {
                for (ulong rowIndex = 0; rowIndex < length; rowIndex++)
                {
                    switch (_settings.RowIndexFormat)
                    {
                    case CsvRowIndexFormat.Index:
                        streamWriter.Write($"{string.Format(_nfi, "{0:N0}", fileOffset + rowIndex)};");
                        break;

                    case CsvRowIndexFormat.Unix:
                        streamWriter.Write($"{string.Format(_nfi, "{0:N5}", _unixStart + (double)((fileOffset + rowIndex) / contextGroup.SampleRate.SamplesPerSecond))};");
                        break;

                    default:
                        throw new NotSupportedException($"The row index format '{_settings.RowIndexFormat}' is not supported.");
                    }

                    for (int i = 0; i < simpleBuffers.Count; i++)
                    {
                        var value = simpleBuffers[i].Buffer[(int)(bufferOffset + rowIndex)];
                        streamWriter.Write($"{string.Format(_nfi, $"{{0:G{_settings.SignificantFigures}}}", value)};");
                    }

                    streamWriter.WriteLine();
                }
            }
        }
Esempio n. 2
0
        protected override void OnWrite(ChannelContextGroup contextGroup, ulong fileOffset, ulong bufferOffset, ulong length)
        {
            long groupId = -1;

            try
            {
                var firstChunk = (long)this.ToChunkIndex(fileOffset, contextGroup.SampleRate);
                var lastChunk  = (long)this.ToChunkIndex(fileOffset + length, contextGroup.SampleRate) - 1;

                groupId = H5G.open(_fileId, $"/info");

                _lastCompletedChunk = IOHelper.ReadDataset <double>(groupId, "last_completed_chunk").FirstOrDefault();

                // this does not work in conjunction with multiple context groups
                if (firstChunk <= _lastCompletedChunk)
                {
                    // throw new Exception(ErrorMessage.Mat73Writer_ChunkAlreadyWritten);
                }

                // write data
                for (int i = 0; i < contextGroup.ChannelContextSet.Count(); i++)
                {
                    this.WriteData(fileOffset, bufferOffset, length, contextGroup.ChannelContextSet[i]);
                }

                // write last_completed_chunk
                IOHelper.WriteDataset(groupId, "last_completed_chunk", new double[] { lastChunk });
            }
            finally
            {
                if (H5I.is_valid(groupId) > 0)
                {
                    H5G.close(groupId);
                }

                H5F.flush(_fileId, H5F.scope_t.GLOBAL);
            }
        }
Esempio n. 3
0
        protected override void OnWrite(ChannelContextGroup contextGroup, ulong fileOffset, ulong bufferOffset, ulong length)
        {
            if (length <= 0)
            {
                throw new Exception(ErrorMessage.FamosWriter_SampleRateTooLow);
            }

            var simpleBuffers = contextGroup.ChannelContextSet.Select(channelContext => channelContext.Buffer.ToSimpleBuffer()).ToList();

            var fieldIndex = _spdToFieldIndexMap[contextGroup.SampleRate.SamplesPerDay];
            var field      = _famosFile.Fields[fieldIndex];

            _famosFile.Edit(writer =>
            {
                for (int i = 0; i < simpleBuffers.Count; i++)
                {
                    var component = field.Components[i];
                    var data      = simpleBuffers[i].Buffer.Slice((int)bufferOffset, (int)length);

                    _famosFile.WriteSingle(writer, component, (int)fileOffset, data);
                }
            });
        }