Timetable GetTimetable(string name) { var result = new Timetable(name, GetLayout(name)); var app = new Excel.Application(); Excel.Workbook book = null; app.Visible = false; try { book = app.Workbooks.Open(GetFilename(name)); GetTrains(result, book); } finally { if (book != null) book.Close(false); } return result; }
private static StationCall GetCall(IDataRecord record, Timetable timetable) { Time arrivalTime = null; Time departureTime = null; var a = record.GetOrdinal("ArrivalTime"); if (! record.IsDBNull(a)) { var value = record.GetDateTime(a); arrivalTime = new Time(value.Hour, value.Minute); } var d = record.GetOrdinal("DepartureTime"); if (! record.IsDBNull(d)) { var value = record.GetDateTime(d); departureTime = new Time(value.Hour, value.Minute); } if (arrivalTime == null) arrivalTime = departureTime; if (departureTime == null) departureTime = arrivalTime; var signature = record.GetString(record.GetOrdinal("Signature")); var trackNumber = record.GetString(record.GetOrdinal("TrackNumber")); var stationTrack = timetable.Layout.Station(signature)[trackNumber]; return new StationCall(stationTrack, arrivalTime, departureTime); }
public static void RecordHandler(IDataRecord record, Timetable timetable) { Train currentTrain = null; var key = Thread.CurrentThread.ManagedThreadId; if (CachedTrains.ContainsKey(key)) { currentTrain = CachedTrains[key]; } var identity = record.GetString(record.GetOrdinal("TrainNumber")); var category = GetCategory(record.GetString(record.GetOrdinal("Product"))); if (currentTrain == null) { currentTrain = new Train(category, identity); CachedTrains[key] = currentTrain; } if (currentTrain.Identity != identity) { timetable.Add(currentTrain); currentTrain = new Train(category, identity); CachedTrains[key] = currentTrain; } currentTrain.Add(GetCall(record, timetable)); }
private static void GetTrains(Timetable timetable, Excel.Workbook book) { Excel.Worksheet sheet = book.Worksheets["Trains"]; var r = 2; Train current = null; while (true) { var row = (Array)sheet.get_Range(Cell("A", r), Cell("K", r)).Cells.Value; if (row.GetValue(1, 1) == null) { break; } else { var type = row.Value(9).ToLowerInvariant(); switch (type) { case "traindef": if (current != null) timetable.Add(current); var number = row.Value(10); current = new Train(GetCategory(number.Substring(0, 1)), number); break; case "timetable": try { var track = timetable.Layout.Station(row.Value(3))[row.Value(4)]; current.Add(new StationCall(track, Time.Parse(row.Value(5)), Time.Parse(row.Value(6)))); } catch (Exception) { Debugger.Break(); throw; } break; default: break; } } r++; } if (current != null) timetable.Add(current); }
public static void FinalHandler(Timetable timetable) { if (CachedTrains.Any()) { var key = Thread.CurrentThread.ManagedThreadId; var currentTrain = CachedTrains[key]; timetable.Add(currentTrain); CachedTrains[key] = null; } }