virtual public void test() {
            PdfReader reader = TestResourceUtils.GetResourceAsPdfReader(TEST_RESOURCES_PATH, "user10.pdf");
            Rectangle rectangle = new Rectangle(71, 792 - 84, 225, 792 - 75);
            RenderFilter filter = new RegionTextRenderFilter(rectangle);
            String txt = PdfTextExtractor.GetTextFromPage(reader, 1, new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter));

            Assert.AreEqual("Pname Dname Email Address", txt);
        }
        private static ITextExtractionStrategy CreateStrategy(System.util.RectangleJ rect)
        {
            var filters = new RenderFilter[1];
            filters[0] = new RegionTextRenderFilter(rect);

            return new FilteredTextRenderListener(
                new LocationTextExtractionStrategy(),
                filters);
        }
Пример #3
0
        public void Test() {
            PdfReader pdfReader = TestResourceUtils.GetResourceAsPdfReader(TEST_RESOURCES_PATH, "test.pdf");

            String[] expectedText = new String[] {
                "PostScript Compatibility",
                "Because the PostScript language does not support the transparent imaging \n" +
                "model, PDF 1.4 consumer applications must have some means for converting the \n" +
                "appearance of a document that uses transparency to a purely opaque description \n" +
                "for printing on PostScript output devices. Similar techniques can also be used to \n" +
                "convert such documents to a form that can be correctly viewed by PDF 1.3 and \n" +
                "earlier consumers. ",
                "Otherwise, flatten the colors to some assumed device color space with pre-\n" +
                "determined calibration. In the generated PostScript output, paint the flattened \n" +
                "colors in a CIE-based color space having that calibration. "
            };

            Rectangle[] regions = new Rectangle[] {
                new Rectangle(90, 605, 220, 581),
                new Rectangle(80, 578, 450, 486), new Rectangle(103, 196, 460, 143)
            };

            RegionTextRenderFilter[] regionFilters = new RegionTextRenderFilter[regions.Length];
            for (int i = 0; i < regions.Length; i++)
                regionFilters[i] = new RegionTextRenderFilter(regions[i]);


            MultiFilteredRenderListener listener = new MultiFilteredRenderListener();
            LocationTextExtractionStrategy[] extractionStrategies = new LocationTextExtractionStrategy[regions.Length];
            for (int i = 0; i < regions.Length; i++)
                extractionStrategies[i] =
                    (LocationTextExtractionStrategy)
                        listener.AttachRenderListener(new LocationTextExtractionStrategy(), regionFilters[i]);

            new PdfReaderContentParser(pdfReader).ProcessContent(1, listener);

            for (int i = 0; i < regions.Length; i++) {
                String actualText = extractionStrategies[i].GetResultantText();
                Assert.AreEqual(expectedText[i], actualText);
            }
        }
Пример #4
0
        public void MultipleFiltersForOneRegionTest() {
            PdfReader pdfReader = TestResourceUtils.GetResourceAsPdfReader(TEST_RESOURCES_PATH, "test.pdf");

            Rectangle[] regions = new Rectangle[] {
                new Rectangle(0, 0, 500, 650),
                new Rectangle(0, 0, 400, 400), new Rectangle(200, 200, 500, 600), new Rectangle(100, 100, 450, 400)
            };

            RegionTextRenderFilter[] regionFilters = new RegionTextRenderFilter[regions.Length];
            for (int i = 0; i < regions.Length; i++)
                regionFilters[i] = new RegionTextRenderFilter(regions[i]);

            MultiFilteredRenderListener listener = new MultiFilteredRenderListener();
            LocationTextExtractionStrategy extractionStrategy =
                (LocationTextExtractionStrategy)
                    listener.AttachRenderListener(new LocationTextExtractionStrategy(), regionFilters);
            new PdfReaderContentParser(pdfReader).ProcessContent(1, listener);
            String actualText = extractionStrategy.GetResultantText();

            String expectedText = PdfTextExtractor.GetTextFromPage(pdfReader, 1,
                new FilteredTextRenderListener(new LocationTextExtractionStrategy(), regionFilters));

            Assert.AreEqual(expectedText, actualText);
        }
Пример #5
0
        static void Main(string[] args)
        {
            // https://www.spirit.com/content/documents/en-us/timetable06AUG2015.pdf

            // Downlaoding latest pdf from skyteam website
            string myDirpath = AppDomain.CurrentDomain.BaseDirectory + "\\data";
            Directory.CreateDirectory(myDirpath);
            string path = AppDomain.CurrentDomain.BaseDirectory + "data\\Spirit_Timetable.pdf";
            Uri url = new Uri("https://www.spirit.com/content/documents/en-us/timetable08SEP2016.pdf");
            const string ua = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";
            const string referer = "https://www.spirit.com/RouteMaps.aspx";
            if (File.Exists(path))
            {
                WebRequest.DefaultWebProxy = null;
                using (System.Net.WebClient wc = new WebClient())
                {
                    wc.Headers.Add("user-agent", ua);
                    wc.Headers.Add("Referer", referer);
                    wc.Proxy = null;
                    Console.WriteLine("Downloading latest Spirit Airlines timetable pdf file...");
                    wc.DownloadFile(url, path);
                    Console.WriteLine("Download ready...");
                }
            }
            var text = new StringBuilder();
            CultureInfo ci = new CultureInfo("en-US");

            Regex rgxtime = new Regex(@" *(1[0-2]|[1-9]):([0-5][0-9])(a|p|A|P)");
            Regex rgxFlightNumber = new Regex(@"(\d{3,4})");
            Regex rgxIATAAirport = new Regex(@"\[[A-Z]{3}\]");
            Regex rgxdate1 = new Regex(@"(([0-9])|([0-2][0-9])|([3][0-1])) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)");
            Regex rgxdate2 = new Regex(@"Effective (?:(((Jan(uary)?|Ma(r(ch)?|y)|Jul(y)?|Aug(ust)?|Oct(ober)?|Dec(ember)?)\ 31)|((Jan(uary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sept|Nov|Dec)(ember)?)\ (0?[1-9]|([12]\d)|30))|(Feb(ruary)?\ (0?[1-9]|1\d|2[0-8]|(29(?=,\ ((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))))\,\ ((1[6-9]|[2-9]\d)\d{2}))");
            Regex rgxFlightDay = new Regex(@"[1234567]");
            Regex rgxFlightTime = new Regex(@"^([0-9]|0[0-9]|1[0-9]|2[0-3])H([0-9]|0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])M$");
            List<CIFLight> CIFLights = new List<CIFLight> { };
            List<Rectangle> rectangles = new List<Rectangle>();

            //rectangles.Add(new Rectangle(x+(j*offset), (y+i*offset), offset, offset));
            float distanceInPixelsFromLeft = 0;
            float distanceInPixelsFromBottom = 92;
            float width = 275;//pdfReader.GetPageSize(page).Width / 2;
            float height = 700; // pdfReader.GetPageSize(page).Height;
            // Format Paper
            // Letter		 612x792
            // A4		     595x842

            var firstpage = new Rectangle(
                        distanceInPixelsFromLeft,
                        distanceInPixelsFromBottom,
                        width,
                        height);

            var left = new Rectangle(
                        distanceInPixelsFromLeft,
                        distanceInPixelsFromBottom,
                        width,
                        height);

            var right = new Rectangle(
                       307,
                       distanceInPixelsFromBottom,
                       612,
                       height);

            rectangles.Add(left);
            rectangles.Add(right);

            // The PdfReader object implements IDisposable.Dispose, so you can
            // wrap it in the using keyword to automatically dispose of it
            Console.WriteLine("Opening PDF File...");

            //PdfReader reader = new PdfReader(path);

            using (var pdfReader = new PdfReader(path))
            {

                // Parsing first page for valid from and to dates.

                ITextExtractionStrategy fpstrategy = new SimpleTextExtractionStrategy();

                var fpcurrentText = PdfTextExtractor.GetTextFromPage(
                    pdfReader,
                    1,
                    fpstrategy);

                fpcurrentText =
                    Encoding.UTF8.GetString(Encoding.Convert(
                        Encoding.Default,
                        Encoding.UTF8,
                        Encoding.Default.GetBytes(fpcurrentText)));

                MatchCollection matches = rgxdate2.Matches(fpcurrentText);

                string validfrom = matches[0].Value;
                validfrom = validfrom.Replace("Effective ", "");
                //string validto = matches[1].Value;
                DateTime ValidFrom = DateTime.ParseExact(validfrom, "MMMM d, yyyy", ci);
                // Spirit airlines to date is around a month valid
                DateTime ValidTo = ValidFrom.AddDays(90);

                // To And From Can continue on the other page; So do not reset when parsing new page.
                string TEMP_FromIATA = null;
                string TEMP_ToIATA = null;

                // Loop through each page of the document
                for (var page = 2; page <= pdfReader.NumberOfPages; page++)
                {

                    Console.WriteLine("Parsing page {0}...", page);

                    foreach (Rectangle rect in rectangles)
                    {
                        ITextExtractionStrategy its = new CSVTextExtractionStrategy();
                        var filters = new RenderFilter[1];
                        filters[0] = new RegionTextRenderFilter(rect);

                        ITextExtractionStrategy strategy =
                            new FilteredTextRenderListener(
                                new CSVTextExtractionStrategy(), // new LocationTextExtractionStrategy()
                                filters);

                        var currentText = PdfTextExtractor.GetTextFromPage(
                            pdfReader,
                            page,
                            strategy);

                        currentText =
                            Encoding.UTF8.GetString(Encoding.Convert(
                                Encoding.Default,
                                Encoding.UTF8,
                                Encoding.Default.GetBytes(currentText)));

                        string[] lines = Regex.Split(currentText, "\r\n");
                        DateTime TEMP_ValidFrom = ValidFrom;
                        DateTime TEMP_ValidTo = ValidTo;
                        int TEMP_Conversie = 0;
                        Boolean TEMP_FlightMonday = false;
                        Boolean TEMP_FlightTuesday = false;
                        Boolean TEMP_FlightWednesday = false;
                        Boolean TEMP_FlightThursday = false;
                        Boolean TEMP_FlightFriday = false;
                        Boolean TEMP_FlightSaterday = false;
                        Boolean TEMP_FlightSunday = false;
                        DateTime TEMP_DepartTime = new DateTime();
                        DateTime TEMP_ArrivalTime = new DateTime();
                        Boolean TEMP_FlightCodeShare = false;
                        string TEMP_FlightNumber = null;
                        string TEMP_Aircraftcode = null;
                        TimeSpan TEMP_DurationTime = TimeSpan.MinValue;
                        Boolean TEMP_FlightNextDayArrival = false;
                        int TEMP_FlightNextDays = 0;
                        Boolean TEMP_FlightDirect = true;

                        foreach (string line in lines)
                        {
                            string[] values = line.SplitWithQualifier(',', '\"', true);

                            foreach (string value in values)
                            {
                                if (!String.IsNullOrEmpty(value.Trim()))
                                {
                                    // Trim the string
                                    string temp_string = value.Trim();
                                    // From and To
                                    if (rgxIATAAirport.Matches(temp_string).Count > 0)
                                    {
                                        if (temp_string.Contains("FROM"))
                                        {
                                            string airport = rgxIATAAirport.Match(temp_string).Groups[0].Value;
                                            airport = airport.Replace("[", "");
                                            airport = airport.Replace("]", "");
                                            TEMP_FromIATA = airport;
                                        }
                                        else
                                        {
                                            if (temp_string.Contains("TO"))
                                            {
                                                string airport = rgxIATAAirport.Match(temp_string).Groups[0].Value;
                                                airport = airport.Replace("[", "");
                                                airport = airport.Replace("]", "");
                                                TEMP_ToIATA = airport;
                                            }
                                        }
                                    }
                                    // Depart and arrival times
                                    if (rgxtime.Matches(temp_string).Count > 0)
                                    {
                                        //if (rgxtime.Matches(temp_string).Count == 2)
                                        //{
                                        // Contains to and from date.
                                        foreach (Match ItemMatch in rgxtime.Matches(temp_string))
                                        {
                                            if (TEMP_DepartTime == DateTime.MinValue)
                                            {
                                                // Time Parsing
                                                string y = ItemMatch.Value;
                                                y = y.ToUpper();
                                                y = y.Trim();
                                                TEMP_DepartTime = DateTime.ParseExact(y, "h:mmt", ci);
                                            }
                                            else
                                            {
                                                // There is a from value so this is to.
                                                string x = ItemMatch.Value;
                                                x = x.ToUpper();
                                                x = x.Trim();
                                                if (x.Contains("+1"))
                                                {
                                                    // Next day arrival
                                                    x = x.Replace("+1", "");
                                                    TEMP_FlightNextDays = 1;
                                                    TEMP_FlightNextDayArrival = true;
                                                }
                                                if (x.Contains("+2"))
                                                {
                                                    // Next day arrival
                                                    x = x.Replace("+2", "");
                                                    TEMP_FlightNextDays = 2;
                                                    TEMP_FlightNextDayArrival = true;
                                                }
                                                if (x.Contains("+-1"))
                                                {
                                                    // Next day arrival
                                                    x = x.Replace("+-1", "");
                                                    TEMP_FlightNextDays = -1;
                                                    TEMP_FlightNextDayArrival = true;
                                                }
                                                //DateTime.TryParse(x.Trim(), out TEMP_ArrivalTime);
                                                TEMP_ArrivalTime = DateTime.ParseExact(x, "h:mmt", ci);
                                            }
                                        }
                                    }
                                    // FlightNumber Parsing
                                    if (rgxFlightNumber.IsMatch(temp_string) && TEMP_ArrivalTime != DateTime.MinValue && TEMP_FlightMonday == false && TEMP_FlightTuesday == false && TEMP_FlightWednesday == false && TEMP_FlightThursday == false && TEMP_FlightFriday == false && TEMP_FlightSaterday == false && TEMP_FlightSunday == false)
                                    {
                                        // Extra check for SU9 flight number and Aircraft Type
                                        if (TEMP_FlightNumber == null)
                                        {
                                            TEMP_FlightNumber = temp_string;
                                            if (temp_string.Contains("*"))
                                            {
                                                TEMP_FlightCodeShare = true;
                                                TEMP_FlightNumber = TEMP_FlightNumber.Replace("*", "");
                                            }
                                        }
                                    }
                                    // Parsing flightdays
                                    if ((rgxFlightDay.Matches(temp_string).Count > 0 || temp_string.Contains("Daily")) && TEMP_FlightNumber != null && TEMP_FlightNumber != temp_string)
                                    {
                                        // Flight days found!
                                        if (temp_string.Contains("Daily"))
                                        {
                                            // all days
                                            TEMP_FlightSunday = true;
                                            TEMP_FlightMonday = true;
                                            TEMP_FlightTuesday = true;
                                            TEMP_FlightWednesday = true;
                                            TEMP_FlightThursday = true;
                                            TEMP_FlightFriday = true;
                                            TEMP_FlightSaterday = true;
                                        }
                                        else
                                        {
                                            if (temp_string.StartsWith("X"))
                                            {
                                                // Alle days exept.
                                                TEMP_FlightSunday = true;
                                                TEMP_FlightMonday = true;
                                                TEMP_FlightTuesday = true;
                                                TEMP_FlightWednesday = true;
                                                TEMP_FlightThursday = true;
                                                TEMP_FlightFriday = true;
                                                TEMP_FlightSaterday = true;
                                                foreach (Match ItemMatch in rgxFlightDay.Matches(temp_string))
                                                {
                                                    int.TryParse(ItemMatch.Value, out TEMP_Conversie);
                                                    if (TEMP_Conversie == 1) { TEMP_FlightMonday = false; }
                                                    if (TEMP_Conversie == 2) { TEMP_FlightTuesday = false; }
                                                    if (TEMP_Conversie == 3) { TEMP_FlightWednesday = false; }
                                                    if (TEMP_Conversie == 4) { TEMP_FlightThursday = false; }
                                                    if (TEMP_Conversie == 5) { TEMP_FlightFriday = false; }
                                                    if (TEMP_Conversie == 6) { TEMP_FlightSaterday = false; }
                                                    if (TEMP_Conversie == 7) { TEMP_FlightSunday = false; }
                                                }
                                            }
                                            else
                                            {
                                                foreach (Match ItemMatch in rgxFlightDay.Matches(temp_string))
                                                {
                                                    int.TryParse(ItemMatch.Value, out TEMP_Conversie);
                                                    if (TEMP_Conversie == 1) { TEMP_FlightMonday = true; }
                                                    if (TEMP_Conversie == 2) { TEMP_FlightTuesday = true; }
                                                    if (TEMP_Conversie == 3) { TEMP_FlightWednesday = true; }
                                                    if (TEMP_Conversie == 4) { TEMP_FlightThursday = true; }
                                                    if (TEMP_Conversie == 5) { TEMP_FlightFriday = true; }
                                                    if (TEMP_Conversie == 6) { TEMP_FlightSaterday = true; }
                                                    if (TEMP_Conversie == 7) { TEMP_FlightSunday = true; }
                                                }
                                            }
                                        }
                                    }
                                    //// Aircraft parsing

                                    //if (temp_string.Length == 3)
                                    //{
                                    //    if (_SkyTeamAircraftCode.Contains(temp_string, StringComparer.OrdinalIgnoreCase))
                                    //    {
                                    //        if (TEMP_Aircraftcode == null)
                                    //        {
                                    //            TEMP_Aircraftcode = temp_string;
                                    //        }
                                    //    }
                                    //}
                                    // Stops?
                                    if (temp_string == "0" || temp_string == "1")
                                    {
                                        if (temp_string == "0")
                                        {
                                            TEMP_FlightDirect = true;
                                        }
                                        else
                                        {
                                            // check if all flightdays are filled in.
                                            if ((TEMP_FlightMonday == true || TEMP_FlightMonday == false) && (TEMP_FlightTuesday == true || TEMP_FlightTuesday == false) && (TEMP_FlightWednesday == true || TEMP_FlightWednesday == false) && (TEMP_FlightThursday == true || TEMP_FlightThursday == false) && (TEMP_FlightFriday == true || TEMP_FlightFriday == false) && (TEMP_FlightSaterday == true || TEMP_FlightSaterday == false) && (TEMP_FlightSunday == true || TEMP_FlightSunday == false))
                                            {
                                                // Days are filled so this is a stop
                                                TEMP_FlightDirect = false;
                                            }
                                        }
                                        // Last Column
                                        if (_ColombiaAirports.Contains(TEMP_FromIATA, StringComparer.OrdinalIgnoreCase) & !_ColombiaAirports.Contains(TEMP_ToIATA, StringComparer.OrdinalIgnoreCase) || (_ColombiaAirports.Contains(TEMP_ToIATA, StringComparer.OrdinalIgnoreCase) & !_ColombiaAirports.Contains(TEMP_FromIATA, StringComparer.OrdinalIgnoreCase)) || (_ColombiaAirports.Contains(TEMP_ToIATA, StringComparer.OrdinalIgnoreCase) & _ColombiaAirports.Contains(TEMP_FromIATA, StringComparer.OrdinalIgnoreCase)))
                                        {
                                            CIFLights.Add(new CIFLight
                                            {
                                                FromIATA = TEMP_FromIATA,
                                                ToIATA = TEMP_ToIATA,
                                                FromDate = TEMP_ValidFrom,
                                                ToDate = TEMP_ValidTo,
                                                ArrivalTime = TEMP_ArrivalTime,
                                                DepartTime = TEMP_DepartTime,
                                                FlightAircraft = @"Airbus A319/A320",
                                                FlightAirline = @"NK",
                                                FlightMonday = TEMP_FlightMonday,
                                                FlightTuesday = TEMP_FlightTuesday,
                                                FlightWednesday = TEMP_FlightWednesday,
                                                FlightThursday = TEMP_FlightThursday,
                                                FlightFriday = TEMP_FlightFriday,
                                                FlightSaterday = TEMP_FlightSaterday,
                                                FlightSunday = TEMP_FlightSunday,
                                                FlightNumber = TEMP_FlightNumber,
                                                FlightOperator = "NK",
                                                FlightDuration = null,
                                                FlightCodeShare = TEMP_FlightCodeShare,
                                                FlightNextDayArrival = TEMP_FlightNextDayArrival,
                                                FlightNextDays = TEMP_FlightNextDays,
                                                FlightDirect = TEMP_FlightDirect
                                            });
                                            // Cleaning All but From and To
                                            TEMP_ValidFrom = ValidFrom;
                                            TEMP_ValidTo = ValidTo;
                                            TEMP_Conversie = 0;
                                            TEMP_FlightMonday = false;
                                            TEMP_FlightTuesday = false;
                                            TEMP_FlightWednesday = false;
                                            TEMP_FlightThursday = false;
                                            TEMP_FlightFriday = false;
                                            TEMP_FlightSaterday = false;
                                            TEMP_FlightSunday = false;
                                            TEMP_DepartTime = new DateTime();
                                            TEMP_ArrivalTime = new DateTime();
                                            TEMP_FlightNumber = null;
                                            TEMP_Aircraftcode = null;
                                            TEMP_DurationTime = TimeSpan.MinValue;
                                            TEMP_FlightCodeShare = false;
                                            TEMP_FlightNextDayArrival = false;
                                            TEMP_FlightNextDays = 0;
                                            TEMP_FlightDirect = true;
                                        }
                                    }

                                    //if (TEMP_Aircraftcode != null && rgxFlightTime.Matches(temp_string).Count > 0)
                                    //{
                                    //    // Aircraft code has been found so this has to be the flighttimes. and so the last value of the string...
                                    //    int intFlightTimeH = 0;
                                    //    int intFlightTimeM = 0;
                                    //    var match = rgxFlightTime.Match(temp_string);
                                    //    intFlightTimeH = int.Parse(match.Groups[1].Value);
                                    //    intFlightTimeM = int.Parse(match.Groups[2].Value);
                                    //    TEMP_DurationTime = new TimeSpan(0, intFlightTimeH, intFlightTimeM, 0);
                                    //    //int rgxFlightTimeH = rgxFlightTime.Match(temp_string).Groups[0].Value
                                    //    //TEMP_DurationTime = DateTime.ParseExact(temp_string, "HH\H mm \M", null);
                                    //    string TEMP_Airline = null;
                                    //    if (TEMP_Aircraftcode == "BUS") { TEMP_Airline = null; }
                                    //    else { TEMP_Airline = TEMP_FlightNumber.Substring(0, 2); }

                                    //}
                                    //if (temp_string.Contains("EFF ") || temp_string.Contains("DIS "))
                                    //{
                                    //    // custom from and to dates
                                    //    if (temp_string.Contains("EFF "))
                                    //    {
                                    //        temp_string = temp_string.Replace("EFF ", "");
                                    //        //TEMP_ValidFrom = DateTime.ParseExact(temp_string.Trim(), "MM/dd/YY", ci);
                                    //        CIFLights[CIFLights.Count - 1].FromDate = DateTime.ParseExact(temp_string.Trim(), "MM/dd/yy", ci);
                                    //        CIFLights[CIFLights.Count - 1].ToDate = ValidTo;
                                    //    }

                                    //    if (temp_string.Contains("DIS "))
                                    //    {
                                    //        temp_string = temp_string.Replace("DIS ", "");
                                    //        CIFLights[CIFLights.Count - 1].ToDate = DateTime.ParseExact(temp_string.Trim(), "MM/dd/yy", ci);
                                    //        CIFLights[CIFLights.Count - 1].FromDate = ValidFrom;
                                    //    }
                                    //}
                                    //if (temp_string.Contains("Operated by: "))
                                    //{
                                    //    // Ok, this has to be added to the last record.
                                    //    CIFLights[CIFLights.Count - 1].FlightOperator = temp_string.Replace("Operated by: ", "").Trim();
                                    //    CIFLights[CIFLights.Count - 1].FlightCodeShare = true;
                                    //}
                                    //if (temp_string.Equals("Consult your travel agent for details"))
                                    //{
                                    //    TEMP_ToIATA = null;
                                    //    TEMP_FromIATA = null;
                                    //    TEMP_ValidFrom = new DateTime();
                                    //    TEMP_ValidTo = new DateTime();
                                    //    TEMP_Conversie = 0;
                                    //    TEMP_FlightMonday = false;
                                    //    TEMP_FlightTuesday = false;
                                    //    TEMP_FlightWednesday = false;
                                    //    TEMP_FlightThursday = false;
                                    //    TEMP_FlightFriday = false;
                                    //    TEMP_FlightSaterday = false;
                                    //    TEMP_FlightSunday = false;
                                    //    TEMP_DepartTime = new DateTime();
                                    //    TEMP_ArrivalTime = new DateTime();
                                    //    TEMP_FlightNumber = null;
                                    //    TEMP_Aircraftcode = null;
                                    //    TEMP_DurationTime = TimeSpan.MinValue;
                                    //    TEMP_FlightCodeShare = false;
                                    //    TEMP_FlightNextDayArrival = false;
                                    //    TEMP_FlightNextDays = 0;
                                    //    TEMP_FlightDirect = true;

                                    //}
                                    Console.WriteLine(value);
                                }
                            }
                        }

                    }
                }
            }

            // You'll do something else with it, here I write it to a console window
            // Console.WriteLine(text.ToString());

            // Write the list of objects to a file.
            System.Xml.Serialization.XmlSerializer writer =
            new System.Xml.Serialization.XmlSerializer(CIFLights.GetType());
            string myDir = AppDomain.CurrentDomain.BaseDirectory + "\\output";
            Directory.CreateDirectory(myDir);
            StreamWriter file =
               new System.IO.StreamWriter("output\\output.xml");

            writer.Serialize(file, CIFLights);
            file.Close();

            string gtfsDir = AppDomain.CurrentDomain.BaseDirectory + "\\gtfs";
            System.IO.Directory.CreateDirectory(gtfsDir);

            Console.WriteLine("Reading IATA Airports....");
            string IATAAirportsFile = AppDomain.CurrentDomain.BaseDirectory + "IATAAirports.json";
            JArray o1 = JArray.Parse(File.ReadAllText(IATAAirportsFile));
            IList<IATAAirport> TempIATAAirports = o1.ToObject<IList<IATAAirport>>();
            var IATAAirports = TempIATAAirports as List<IATAAirport>;

            Console.WriteLine("Creating GTFS Files...");

            Console.WriteLine("Creating GTFS File agency.txt...");
            using (var gtfsagency = new StreamWriter(@"gtfs\\agency.txt"))
            {
                var csv = new CsvWriter(gtfsagency);
                csv.Configuration.Delimiter = ",";
                csv.Configuration.Encoding = Encoding.UTF8;
                csv.Configuration.TrimFields = true;
                // header
                csv.WriteField("agency_id");
                csv.WriteField("agency_name");
                csv.WriteField("agency_url");
                csv.WriteField("agency_timezone");
                csv.WriteField("agency_lang");
                csv.WriteField("agency_phone");
                csv.WriteField("agency_fare_url");
                csv.WriteField("agency_email");
                csv.NextRecord();

                csv.WriteField("NK");
                csv.WriteField("Spirit Airlines");
                csv.WriteField("http://www.spirit.com/");
                csv.WriteField("America/Bogota");
                csv.WriteField("ES");
                csv.WriteField("");
                csv.WriteField("");
                csv.WriteField("");
                csv.NextRecord();

                //csv.WriteField("AV");
                //csv.WriteField("Avianca");
                //csv.WriteField("http://www.avianca.com");
                //csv.WriteField("America/Bogota");
                //csv.WriteField("ES");
                //csv.WriteField("");
                //csv.WriteField("");
                //csv.WriteField("");
                //csv.NextRecord();
            }

            Console.WriteLine("Creating GTFS File routes.txt ...");

            using (var gtfsroutes = new StreamWriter(@"gtfs\\routes.txt"))
            {
                // Route record

                var csvroutes = new CsvWriter(gtfsroutes);
                csvroutes.Configuration.Delimiter = ",";
                csvroutes.Configuration.Encoding = Encoding.UTF8;
                csvroutes.Configuration.TrimFields = true;
                // header
                csvroutes.WriteField("route_id");
                csvroutes.WriteField("agency_id");
                csvroutes.WriteField("route_short_name");
                csvroutes.WriteField("route_long_name");
                csvroutes.WriteField("route_desc");
                csvroutes.WriteField("route_type");
                csvroutes.WriteField("route_url");
                csvroutes.WriteField("route_color");
                csvroutes.WriteField("route_text_color");
                csvroutes.NextRecord();

                var routes = CIFLights.Select(m => new { m.FromIATA, m.ToIATA, m.FlightAirline }).Distinct().ToList();

                for (int i = 0; i < routes.Count; i++) // Loop through List with for)
                {
                    var FromAirportInfo = IATAAirports.Find(q => q.stop_id == routes[i].FromIATA);
                    var ToAirportInfo = IATAAirports.Find(q => q.stop_id == routes[i].ToIATA);

                    csvroutes.WriteField(routes[i].FromIATA + routes[i].ToIATA + "NK");
                    csvroutes.WriteField("NK");
                    csvroutes.WriteField(routes[i].FromIATA + routes[i].ToIATA);
                    csvroutes.WriteField(FromAirportInfo.stop_name + " - " + ToAirportInfo.stop_name);
                    csvroutes.WriteField(""); // routes[i].FlightAircraft + ";" + CIFLights[i].FlightAirline + ";" + CIFLights[i].FlightOperator + ";" + CIFLights[i].FlightCodeShare
                    csvroutes.WriteField(1101);
                    csvroutes.WriteField("");
                    csvroutes.WriteField("");
                    csvroutes.WriteField("");
                    csvroutes.NextRecord();
                }
            }

            List<string> agencyairportsiata =
             CIFLights.SelectMany(m => new string[] { m.FromIATA, m.ToIATA })
                     .Distinct()
                     .ToList();

            using (var gtfsstops = new StreamWriter(@"gtfs\\stops.txt"))
            {
                // Route record
                var csvstops = new CsvWriter(gtfsstops);
                csvstops.Configuration.Delimiter = ",";
                csvstops.Configuration.Encoding = Encoding.UTF8;
                csvstops.Configuration.TrimFields = true;
                // header
                csvstops.WriteField("stop_id");
                csvstops.WriteField("stop_name");
                csvstops.WriteField("stop_desc");
                csvstops.WriteField("stop_lat");
                csvstops.WriteField("stop_lon");
                csvstops.WriteField("zone_id");
                csvstops.WriteField("stop_url");
                csvstops.NextRecord();

                for (int i = 0; i < agencyairportsiata.Count; i++) // Loop through List with for)
                {
                    //int result1 = IATAAirports.FindIndex(T => T.stop_id == 9458)
                    var airportinfo = IATAAirports.Find(q => q.stop_id == agencyairportsiata[i]);
                    csvstops.WriteField(airportinfo.stop_id);
                    csvstops.WriteField(airportinfo.stop_name);
                    csvstops.WriteField(airportinfo.stop_desc);
                    csvstops.WriteField(airportinfo.stop_lat);
                    csvstops.WriteField(airportinfo.stop_lon);
                    csvstops.WriteField(airportinfo.zone_id);
                    csvstops.WriteField(airportinfo.stop_url);
                    csvstops.NextRecord();
                }
            }

            Console.WriteLine("Creating GTFS File trips.txt, stop_times.txt, calendar.txt ...");

            using (var gtfscalendar = new StreamWriter(@"gtfs\\calendar.txt"))
            {
                using (var gtfstrips = new StreamWriter(@"gtfs\\trips.txt"))
                {
                    using (var gtfsstoptimes = new StreamWriter(@"gtfs\\stop_times.txt"))
                    {
                        // Headers
                        var csvstoptimes = new CsvWriter(gtfsstoptimes);
                        csvstoptimes.Configuration.Delimiter = ",";
                        csvstoptimes.Configuration.Encoding = Encoding.UTF8;
                        csvstoptimes.Configuration.TrimFields = true;
                        // header
                        csvstoptimes.WriteField("trip_id");
                        csvstoptimes.WriteField("arrival_time");
                        csvstoptimes.WriteField("departure_time");
                        csvstoptimes.WriteField("stop_id");
                        csvstoptimes.WriteField("stop_sequence");
                        csvstoptimes.WriteField("stop_headsign");
                        csvstoptimes.WriteField("pickup_type");
                        csvstoptimes.WriteField("drop_off_type");
                        csvstoptimes.WriteField("shape_dist_traveled");
                        csvstoptimes.WriteField("timepoint");
                        csvstoptimes.NextRecord();

                        var csvtrips = new CsvWriter(gtfstrips);
                        csvtrips.Configuration.Delimiter = ",";
                        csvtrips.Configuration.Encoding = Encoding.UTF8;
                        csvtrips.Configuration.TrimFields = true;
                        // header
                        csvtrips.WriteField("route_id");
                        csvtrips.WriteField("service_id");
                        csvtrips.WriteField("trip_id");
                        csvtrips.WriteField("trip_headsign");
                        csvtrips.WriteField("trip_short_name");
                        csvtrips.WriteField("direction_id");
                        csvtrips.WriteField("block_id");
                        csvtrips.WriteField("shape_id");
                        csvtrips.WriteField("wheelchair_accessible");
                        csvtrips.WriteField("bikes_allowed ");
                        csvtrips.NextRecord();

                        var csvcalendar = new CsvWriter(gtfscalendar);
                        csvcalendar.Configuration.Delimiter = ",";
                        csvcalendar.Configuration.Encoding = Encoding.UTF8;
                        csvcalendar.Configuration.TrimFields = true;
                        // header
                        csvcalendar.WriteField("service_id");
                        csvcalendar.WriteField("monday");
                        csvcalendar.WriteField("tuesday");
                        csvcalendar.WriteField("wednesday");
                        csvcalendar.WriteField("thursday");
                        csvcalendar.WriteField("friday");
                        csvcalendar.WriteField("saturday");
                        csvcalendar.WriteField("sunday");
                        csvcalendar.WriteField("start_date");
                        csvcalendar.WriteField("end_date");
                        csvcalendar.NextRecord();

                        //1101 International Air Service
                        //1102 Domestic Air Service
                        //1103 Intercontinental Air Service
                        //1104 Domestic Scheduled Air Service

                        for (int i = 0; i < CIFLights.Count; i++) // Loop through List with for)
                        {

                            // Calender

                            csvcalendar.WriteField(CIFLights[i].FromIATA + CIFLights[i].ToIATA + CIFLights[i].FlightNumber.Replace(" ", "") + String.Format("{0:yyyyMMdd}", CIFLights[i].FromDate) + String.Format("{0:yyyyMMdd}", CIFLights[i].ToDate));
                            csvcalendar.WriteField(Convert.ToInt32(CIFLights[i].FlightMonday));
                            csvcalendar.WriteField(Convert.ToInt32(CIFLights[i].FlightTuesday));
                            csvcalendar.WriteField(Convert.ToInt32(CIFLights[i].FlightWednesday));
                            csvcalendar.WriteField(Convert.ToInt32(CIFLights[i].FlightThursday));
                            csvcalendar.WriteField(Convert.ToInt32(CIFLights[i].FlightFriday));
                            csvcalendar.WriteField(Convert.ToInt32(CIFLights[i].FlightSaterday));
                            csvcalendar.WriteField(Convert.ToInt32(CIFLights[i].FlightSunday));
                            csvcalendar.WriteField(String.Format("{0:yyyyMMdd}", CIFLights[i].FromDate));
                            csvcalendar.WriteField(String.Format("{0:yyyyMMdd}", CIFLights[i].ToDate));
                            csvcalendar.NextRecord();

                            // Trips

                            //var item4 = _Airlines.Find(q => q.Name == CIFLights[i].FlightAirline);
                            string TEMP_IATA = "NK";
                            var FromAirportInfo = IATAAirports.Find(q => q.stop_id == CIFLights[i].FromIATA);
                            var ToAirportInfo = IATAAirports.Find(q => q.stop_id == CIFLights[i].ToIATA);

                            csvtrips.WriteField(CIFLights[i].FromIATA + CIFLights[i].ToIATA + TEMP_IATA);
                            csvtrips.WriteField(CIFLights[i].FromIATA + CIFLights[i].ToIATA + CIFLights[i].FlightNumber.Replace(" ", "") + String.Format("{0:yyyyMMdd}", CIFLights[i].FromDate) + String.Format("{0:yyyyMMdd}", CIFLights[i].ToDate));
                            csvtrips.WriteField(CIFLights[i].FromIATA + CIFLights[i].ToIATA + CIFLights[i].FlightNumber.Replace(" ", ""));
                            csvtrips.WriteField(ToAirportInfo.stop_name);
                            csvtrips.WriteField(CIFLights[i].FlightNumber);
                            csvtrips.WriteField("");
                            csvtrips.WriteField("");
                            csvtrips.WriteField("");
                            csvtrips.WriteField("1");
                            csvtrips.WriteField("");
                            csvtrips.NextRecord();

                            // Depart Record
                            csvstoptimes.WriteField(CIFLights[i].FromIATA + CIFLights[i].ToIATA + CIFLights[i].FlightNumber.Replace(" ", ""));
                            csvstoptimes.WriteField(String.Format("{0:HH:mm:ss}", CIFLights[i].DepartTime));
                            csvstoptimes.WriteField(String.Format("{0:HH:mm:ss}", CIFLights[i].DepartTime));
                            csvstoptimes.WriteField(CIFLights[i].FromIATA);
                            csvstoptimes.WriteField("0");
                            csvstoptimes.WriteField("");
                            csvstoptimes.WriteField("0");
                            csvstoptimes.WriteField("0");
                            csvstoptimes.WriteField("");
                            csvstoptimes.WriteField("");
                            csvstoptimes.NextRecord();
                            // Arrival Record
                            if (!CIFLights[i].FlightNextDayArrival)
                            {
                                csvstoptimes.WriteField(CIFLights[i].FromIATA + CIFLights[i].ToIATA + CIFLights[i].FlightNumber.Replace(" ", ""));
                                csvstoptimes.WriteField(String.Format("{0:HH:mm:ss}", CIFLights[i].ArrivalTime));
                                csvstoptimes.WriteField(String.Format("{0:HH:mm:ss}", CIFLights[i].ArrivalTime));
                                csvstoptimes.WriteField(CIFLights[i].ToIATA);
                                csvstoptimes.WriteField("2");
                                csvstoptimes.WriteField("");
                                csvstoptimes.WriteField("0");
                                csvstoptimes.WriteField("0");
                                csvstoptimes.WriteField("");
                                csvstoptimes.WriteField("");
                                csvstoptimes.NextRecord();
                            }
                            else
                            {
                                //add 24 hour for the gtfs time
                                int hour = CIFLights[i].ArrivalTime.Hour;
                                hour = hour + 24;
                                int minute = CIFLights[i].ArrivalTime.Minute;
                                string strminute = minute.ToString();
                                if (strminute.Length == 1) { strminute = "0" + strminute; }

                                csvstoptimes.WriteField(CIFLights[i].FromIATA + CIFLights[i].ToIATA + CIFLights[i].FlightNumber.Replace(" ", ""));
                                csvstoptimes.WriteField(hour + ":" + strminute + ":00");
                                csvstoptimes.WriteField(hour + ":" + strminute + ":00");
                                csvstoptimes.WriteField(CIFLights[i].ToIATA);
                                csvstoptimes.WriteField("2");
                                csvstoptimes.WriteField("");
                                csvstoptimes.WriteField("0");
                                csvstoptimes.WriteField("0");
                                csvstoptimes.WriteField("");
                                csvstoptimes.WriteField("");
                                csvstoptimes.NextRecord();
                            }
                        }
                    }
                }
            }

            // Create Zip File
            string startPath = gtfsDir;
            string zipPath = myDir + "\\SpiritAirlines.zip";
            if (File.Exists(zipPath)) { File.Delete(zipPath); }
            ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, false);

            //Console.ReadKey();
            //Console.WriteLine("Insert into Database...");
            //for (int i = 0; i < CIFLights.Count; i++) // Loop through List with for)
            //{
            //    using (SqlConnection connection = new SqlConnection("Server=(local);Database=CI-Import;Trusted_Connection=True;"))
            //    {
            //        using (SqlCommand command = new SqlCommand())
            //        {
            //            command.Connection = connection;            // <== lacking
            //            command.CommandType = CommandType.StoredProcedure;
            //            command.CommandText = "InsertFlight";
            //            command.Parameters.Add(new SqlParameter("@FlightSource", 5));
            //            command.Parameters.Add(new SqlParameter("@FromIATA", CIFLights[i].FromIATA));
            //            command.Parameters.Add(new SqlParameter("@ToIATA", CIFLights[i].ToIATA));
            //            command.Parameters.Add(new SqlParameter("@FromDate", CIFLights[i].FromDate));
            //            command.Parameters.Add(new SqlParameter("@ToDate", CIFLights[i].ToDate));
            //            command.Parameters.Add(new SqlParameter("@FlightMonday", CIFLights[i].FlightMonday));
            //            command.Parameters.Add(new SqlParameter("@FlightTuesday", CIFLights[i].FlightTuesday));
            //            command.Parameters.Add(new SqlParameter("@FlightWednesday", CIFLights[i].FlightWednesday));
            //            command.Parameters.Add(new SqlParameter("@FlightThursday", CIFLights[i].FlightThursday));
            //            command.Parameters.Add(new SqlParameter("@FlightFriday", CIFLights[i].FlightFriday));
            //            command.Parameters.Add(new SqlParameter("@FlightSaterday", CIFLights[i].FlightSaterday));
            //            command.Parameters.Add(new SqlParameter("@FlightSunday", CIFLights[i].FlightSunday));
            //            command.Parameters.Add(new SqlParameter("@DepartTime", CIFLights[i].DepartTime));
            //            command.Parameters.Add(new SqlParameter("@ArrivalTime", CIFLights[i].ArrivalTime));
            //            command.Parameters.Add(new SqlParameter("@FlightNumber", CIFLights[i].FlightNumber));
            //            command.Parameters.Add(new SqlParameter("@FlightAirline", CIFLights[i].FlightAirline));
            //            command.Parameters.Add(new SqlParameter("@FlightOperator", CIFLights[i].FlightOperator));
            //            command.Parameters.Add(new SqlParameter("@FlightAircraft", CIFLights[i].FlightAircraft));
            //            command.Parameters.Add(new SqlParameter("@FlightCodeShare", CIFLights[i].FlightCodeShare));
            //            command.Parameters.Add(new SqlParameter("@FlightNextDayArrival", CIFLights[i].FlightNextDayArrival));
            //            command.Parameters.Add(new SqlParameter("@FlightDuration", CIFLights[i].FlightDuration));
            //            command.Parameters.Add(new SqlParameter("@FlightNextDays", CIFLights[i].FlightNextDays));
            //            command.Parameters.Add(new SqlParameter("@FlightNonStop", "True"));
            //            command.Parameters.Add(new SqlParameter("@FlightVia", DBNull.Value));

            //            foreach (SqlParameter parameter in command.Parameters)
            //            {
            //                if (parameter.Value == null)
            //                {
            //                    parameter.Value = DBNull.Value;
            //                }
            //            }

            //            try
            //            {
            //                connection.Open();
            //                int recordsAffected = command.ExecuteNonQuery();
            //            }

            //            finally
            //            {
            //                connection.Close();
            //            }
            //        }
            //    }
            //}
        }