public void AddData(string sensorName, List <string> header, SensorValues newRecord) { prepareFs(); var sensorInfo = this.getSensorInfo(sensorName); string str_values_line = valuesToString(newRecord); string[] arr_values = { str_values_line }; int valuesLength = str_values_line.Length; if (sensorInfo.ReadIndex == 0) { // sensorInfo.CsvHeader = header; string str_header = headerToString(header); string[] arr_header = { str_header }; int headerLength = str_header.Length; var borders = new LineBorders() { StartPos = headerLength + 1, EndPos = headerLength + 1 + valuesLength }; lock (sensorInfo.fileLock) { // this will clear file - handy in development File.Delete(sensorInfo.FileName); File.AppendAllLines(sensorInfo.FileName, arr_header); File.AppendAllLines(sensorInfo.FileName, arr_values); sensorInfo.Lines.Add(borders); } } else { var lastBorders = sensorInfo.getLastLine(); File.AppendAllLines(sensorInfo.FileName, arr_values); var borders = new LineBorders() { StartPos = lastBorders.EndPos + 1, EndPos = lastBorders.EndPos + 1 + valuesLength }; sensorInfo.Lines.Add(borders); } sensorInfo.ReadIndex++; }
private async Task PreprocessData(CancellationToken token) { var config = ServiceConfiguration.Instance; for (int index = config.sensorsRange.From; index < config.sensorsRange.To; index++) { string sensorName = config.sensorNamePrefix + index; string sensorFileName = config.dataPath + config.samplePrefix + index + config.sampleExtension; var info = new SensorDataInfo(sensorName, sensorFileName); sensors.Add(sensorName, info); // find start and end position of every line (excluding header line) using (var reader = File.OpenText(info.FileName)) { string headerLine = reader.ReadLine(); info.CsvHeader = headerLine; int lastIndex = headerLine.Length + 1; string line = ""; while ((line = await reader.ReadLineAsync()) != null) { var borders = new LineBorders() { StartPos = lastIndex, EndPos = lastIndex + line.Length }; info.Lines.Add(borders); lastIndex += line.Length + 1; } } } }