// parse a single file private void parse(CharSource charSource, ListMultimap <string, CurveSensitivities> parsed, IList <FailureItem> failures) { try { using (CsvIterator csv = CsvIterator.of(charSource, true)) { if (!csv.containsHeader(TENOR_HEADER) && !csv.containsHeader(DATE_HEADER)) { failures.Add(FailureItem.of(FailureReason.PARSING, "CSV file could not be parsed as sensitivities, invalid format")); } else if (csv.containsHeader(REFERENCE_HEADER) && csv.containsHeader(TYPE_HEADER) && csv.containsHeader(VALUE_HEADER)) { parseStandardFormat(csv, parsed, failures); } else if (csv.containsHeader(REFERENCE_HEADER)) { parseListFormat(csv, parsed, failures); } else { parseGridFormat(csv, parsed, failures); } } } catch (Exception ex) { failures.Add(FailureItem.of(FailureReason.PARSING, ex, "CSV file could not be parsed: {}", ex.Message)); } }
//------------------------------------------------------------------------- /// <summary> /// Checks whether the source is a CSV format sensitivities file. /// <para> /// This parses the headers as CSV and checks that mandatory headers are present. /// /// </para> /// </summary> /// <param name="charSource"> the CSV character source to check </param> /// <returns> true if the source is a CSV file with known headers, false otherwise </returns> public bool isKnownFormat(CharSource charSource) { try { using (CsvIterator csv = CsvIterator.of(charSource, true)) { if (!csv.containsHeader(TENOR_HEADER) && !csv.containsHeader(DATE_HEADER)) { return(false); } if (csv.containsHeader(REFERENCE_HEADER) && csv.containsHeader(TYPE_HEADER) && csv.containsHeader(VALUE_HEADER)) { return(true); // standard format } else if (csv.containsHeader(REFERENCE_HEADER) || csv.containsHeader(TYPE_HEADER)) { return(true); // list or grid format } else { return(csv.headers().Any(SensitivityCsvLoader.knownReference)); // implied grid format } } } catch (Exception) { return(false); } }
//------------------------------------------------------------------------- /// <summary> /// Checks whether the source is a CSV format trade file. /// <para> /// This parses the headers as CSV and checks that mandatory headers are present. /// This is determined entirely from the 'Strata Trade Type' column. /// /// </para> /// </summary> /// <param name="charSource"> the CSV character source to check </param> /// <returns> true if the source is a CSV file with known headers, false otherwise </returns> public bool isKnownFormat(CharSource charSource) { try { using (CsvIterator csv = CsvIterator.of(charSource, true)) { return(csv.containsHeader(TYPE_FIELD)); } } catch (Exception) { return(false); } }