Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static void ProcessCSIDataFile(ref CSIDataRecord record, string[] rows)
- {
- var headers = rows.First().SplitCSV().ToArray();
- var recordRows = rows.Skip(1);
- foreach (var row in recordRows)
- {
- var dataRecord = new CSIDataCSVRecord();
- var columns = row.SplitCSV().ToArray();
- if (columns.Length != headers.Length)
- continue;
- for (var i = 0; i < headers.Length; i++)
- {
- var prop = dataRecord.GetType().GetProperty(headers[i], BindingFlags.Public | BindingFlags.Instance);
- if (prop != null && prop.CanWrite && !columns[i].IsNullOrWhiteSpace())
- {
- var value = columns[i].Trim();
- var length = value.Length;
- if (maxLengths.ContainsKey(prop.Name))
- {
- if (maxLengths[prop.Name] < length)
- maxLengths[prop.Name] = length;
- }
- else
- {
- maxLengths.Add(prop.Name, length);
- }
- if (value.IsNullOrWhiteSpace())
- continue;
- var t = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
- // CSI Data has 0 and 1 for false and true values
- // Normally not needed but is in this circumstance
- if (t == typeof(bool))
- value = (value != "0" && value.ToLower() != "false").ToString();
- // CSI Data may include scientific notation in decimals.
- // We need to make sure all decimals are clean before parsing
- if (t == typeof(decimal))
- value = decimal.Parse(value, NumberStyles.Any).ToString(CultureInfo.InvariantCulture);
- var safeValue = Convert.ChangeType(value, t, CultureInfo.InvariantCulture);
- prop.SetValue(dataRecord, safeValue, null);
- }
- }
- record.CSIDataCSVRecords.Add(dataRecord);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement