private IEnumerable <WorkLogItem> Create(TimeTableHeader header, string line) { var csvFileds = line.Split(_fieldSeparator, StringSplitOptions.None); var itemPrototype = new WorkLogItemPrototype(csvFileds[0], csvFileds[2].Trim(), csvFileds[3].Trim()); foreach (var(columnIndex, workDate) in header.GetColumnIndexAndWorkDatePairs()) { var rawSpentTime = csvFileds[columnIndex]; if (!string.IsNullOrEmpty(rawSpentTime)) { yield return(itemPrototype.Create(workDate, ParseSpentTime(rawSpentTime))); } } }
private TimeTableHeader ParseTimeTableHeader(string rawHeader) { TimeTableHeader header = null; var fields = rawHeader.Split(_fieldSeparator, StringSplitOptions.None); int firstWorkDateIndex = -1; for (var index = 0; index < fields.Length; index++) { var value = fields[index]; if (!string.IsNullOrEmpty(value) && TryParseWorkDate(fields[index], out var workDate)) { header = new TimeTableHeader(index); header.Add(workDate); firstWorkDateIndex = index; break; } } if (header == null) { throw new InvalidOperationException("can not parse time table header"); } for (var index = firstWorkDateIndex + 1; index < fields.Length; index++) { if (!TryParseWorkDate(fields[index], out var workDate)) { break; } header.Add(workDate); } return(header); }