private string rowId(IEnumerable <string> parameters, DataSheet dataSheet, UnformattedRow row)
 {
     return(string
            .Join(
                ",",
                parameters.Select(parameter =>
     {
         var elementColumn = dataSheet.GetColumnDescription(parameter);
         return elementColumn != null ? row.Data.ElementAt(elementColumn.Index) : parameter;
     })
                ));
 }
        private SimulationPoint parseMappingOnSameGivenColumn(MappingDataFormatParameter currentParameter, DataSheet dataSheet, UnformattedRow row)
        {
            var lloqIndex = string.IsNullOrWhiteSpace(currentParameter.MappedColumn.LloqColumn)
            ? -1
            : dataSheet.GetColumnDescription(currentParameter.MappedColumn.LloqColumn).Index;
            var unit = currentParameter.MappedColumn.Unit.ExtractUnit(columnName => dataSheet.GetColumnDescription(columnName).Index, row.Data);

            if (lloqIndex < 0 || !double.TryParse(row.Data.ElementAt(lloqIndex).Trim(), out var lloq))
            {
                lloq = double.NaN;
            }

            var columnDescription = dataSheet.GetColumnDescription(currentParameter.ColumnName);

            var element = row.Data.ElementAt(columnDescription.Index).Trim();

            if (double.TryParse(element, out var result))
            {
                return new SimulationPoint()
                       {
                           Measurement = result,
                           Lloq        = lloq,
                           Unit        = unit
                       }
            }
            ;
            return(new SimulationPoint()
            {
                Measurement = double.NaN,
                Lloq = lloq,
                Unit = unit
            });
        }
        private SimulationPoint parseMappingOnSameColumn(MappingDataFormatParameter currentParameter, DataSheet dataSheet, UnformattedRow row)
        {
            var columnDescription = dataSheet.GetColumnDescription(currentParameter.ColumnName);
            var element           = row.Data.ElementAt(columnDescription.Index).Trim();

            if (!currentParameter.MappedColumn.Unit.ColumnName.IsNullOrEmpty())
            {
                ColumnDescription unitColumnDescription = null;
                if (!string.IsNullOrEmpty(currentParameter.MappedColumn.Unit.ColumnName))
                {
                    unitColumnDescription = dataSheet.GetColumnDescription(currentParameter.MappedColumn.Unit.ColumnName);
                }
                if (unitColumnDescription == null)
                {
                    throw new MissingColumnException(dataSheet.SheetName, currentParameter.MappedColumn.Unit.ColumnName);
                }
            }

            var unit = currentParameter.MappedColumn.Unit.ExtractUnit(columnName => dataSheet.GetColumnDescription(columnName).Index, row.Data);

            if (double.TryParse(element, out var result))
            {
                return new SimulationPoint()
                       {
                           Measurement = result,
                           Unit        = unit,
                           Lloq        = double.NaN
                       }
            }
            ;
            if (element.StartsWith("<"))
            {
                result = element.Substring(1).ConvertedTo <double>();

                return(new SimulationPoint()
                {
                    Lloq = result,
                    Unit = unit
                });
            }

            return(new SimulationPoint()
            {
                Measurement = double.NaN,
                Unit = unit
            });
        }