public static FlightsInfo ReadCSV(string path) { using TextFieldParser csvParser = new TextFieldParser(path); csvParser.CommentTokens = new string[] { COMMENT_TOKEN }; csvParser.SetDelimiters(new string[] { DELIMITER }); csvParser.HasFieldsEnclosedInQuotes = true; // Skip the row with the column names csvParser.ReadLine(); var flightsInfo = new FlightsInfo(); string[] fields; var counter = 0; while (!csvParser.EndOfData) { // Read current line fields, pointer moves to the next line fields = csvParser.ReadFields(); CreateFlight(fields, flightsInfo); if (++counter % 10000 == 0) { Console.WriteLine("Read {0} lines", counter); } } if (counter % 10000 != 0) { Console.WriteLine("Read {0} lines", counter); } return(flightsInfo); }
/// <summary> /// Based on readen data, creates flight object and adds it to a FlightsInfo object /// </summary> /// <param name="fields">Readen data fields</param> /// <param name="flightsInfo">FlightsInfo object to add the new flight to</param> private static void CreateFlight(string[] fields, FlightsInfo flightsInfo) { var origin = GetField(fields, "Origin"); var dest = GetField(fields, "Destination"); var airline = GetField(fields, "Airline"); var depDate = ConvertToDate(GetField(fields, "DepDate")); var depTime = ConvertToMinutes(GetField(fields, "CRSDepTime")); var depDelay = ConvertToInt(GetField(fields, "DepDelay")); var crsElapsedTime = ConvertToMinutes(GetField(fields, "CRSElapsedTime")); var arrDelay = ConvertToInt(GetField(fields, "ArrDelay")); var distance = ConvertToInt(GetField(fields, "Distance")); if (depDate == DateTime.MinValue || depTime == -1 || crsElapsedTime == -1 || !distance.HasValue) { return; } flightsInfo.AddFlight(origin, dest, airline, depDate.AddMinutes(depTime), depDate.AddMinutes(depTime).AddMinutes(crsElapsedTime), depDelay, arrDelay, distance.Value); }