예제 #1
0
        public void LoadKolej(string data, int h, int m)
        {
            kol = new Kolej();
            kol.PobierzPKP(data, h, m, 0);
            kol.PobierzIP();
            kol.Wczytaj();
            dataGridViewKolej.Rows.Clear();
            int sel = -1;

            for (int i = 0; i < kol.Pociagi.Count(); i++)
            {
                Pociag poc  = kol.Pociagi[i];
                string opoz = Convert.ToString(poc.Opoznienie);
                if (poc.Opoznienie == -1)
                {
                    opoz = "N/A";
                }
                if (poc.Selected == true)
                {
                    sel = i;
                }
                dataGridViewKolej.Rows.Add(poc.DataStart + "\n" + poc.Odjazd, poc.DataKoniec + "\n" + poc.Przyjazd, poc.NrPociagu, poc.StacjaStart, poc.StacjaKoniec, poc.CzasPodrozy, opoz);
            }
            Label3 = "Completed";
            dataGridViewKolej.CurrentCell = dataGridViewKolej.Rows[sel].Cells[0];
        }
예제 #2
0
        public void Wczytaj()
        {
            HtmlWeb htmlWeb = new HtmlWeb()
            {
                AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("utf-8")
            };
            HtmlWeb htmlWebIP = new HtmlWeb()
            {
                AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("utf-8")
            };

            HtmlAgilityPack.HtmlDocument htmlDocument   = htmlWeb.Load(@"D:\pociagi.txt");
            HtmlAgilityPack.HtmlDocument htmlDocumentIP = htmlWeb.Load(@"D:\pociagi-ip.txt");

            IEnumerable <HtmlNode> sugestionList   = htmlDocument.DocumentNode.Descendants("tr");
            IEnumerable <HtmlNode> connectionsList = htmlDocumentIP.DocumentNode.Descendants("tr");

            for (int i = 0; i < sugestionList.Count(); i++)
            {
                HtmlNode node  = sugestionList.ElementAt(i);
                int      outer = node.OuterHtml.IndexOf("selected");
                bool     sel   = false;
                if (outer != -1 && outer < 100)
                {
                    sel = true; //sugerowane przez wyszukiwarkę PKP połączenie
                }
                IEnumerable <HtmlNode> elementsList = node.Descendants().Where(x => x.Name == "span" && x.Attributes.Contains("class") && x.Attributes["class"].Value.Split().Contains("clear-lowres"));
                IEnumerable <HtmlNode> odjazdList   = elementsList.ElementAt(2).Descendants().Where(x => x.Name == "span");
                IEnumerable <HtmlNode> przyjazdList = elementsList.ElementAt(3).Descendants().Where(x => x.Name == "span");
                IEnumerable <HtmlNode> dataList     = node.Descendants().Where(x => x.Name == "td" && x.Attributes.Contains("headers") && x.Attributes["headers"].Value.Split().Contains("hafasOVDate"));
                IEnumerable <HtmlNode> durationList = node.Descendants().Where(x => x.Name == "td" && x.Attributes.Contains("headers") && x.Attributes["headers"].Value.Split().Contains("hafasOVDuration"));
                IEnumerable <HtmlNode> numberList   = node.Descendants().Where(x => x.Name == "img" && x.Attributes.Contains("alt") && x.Attributes["alt"].Value.Contains("KS"));

                /*
                 * elementsList:
                 * 0 - nazwa stacji start
                 * 1 - nazwa stacji koniec
                 * 2 - głębiej godzina odjazdu
                 * 3 - głębiej godzina przyjazdu
                 *
                 * odjazdList/przyjazdList:
                 * 2 - godzina
                 *
                 * dataList:
                 * 0 - data/daty
                 *
                 * durationList:
                 * 0 - czas podróży
                 *
                 * numberList:
                 * 0 - numer pociągu
                 */
                string stacjaStart  = elementsList.ElementAt(0).InnerHtml;
                string stacjaKoniec = elementsList.ElementAt(1).InnerHtml;
                stacjaKoniec = stacjaKoniec.Substring(stacjaKoniec.IndexOf(">") + 1);
                string godzinaStart = odjazdList.ElementAt(2).InnerHtml;//.Substring(1);
                if (godzinaStart.IndexOf("0") == 0)
                {
                    godzinaStart = godzinaStart.Substring(1);
                }
                string godzinaKoniec = przyjazdList.ElementAt(2).InnerHtml;//.Substring(1);
                if (godzinaKoniec.IndexOf("0") == 0)
                {
                    godzinaKoniec = godzinaKoniec.Substring(1);
                }
                string dataStart = dataList.ElementAt(0).InnerHtml;
                if (dataStart.IndexOf("0") == 0)
                {
                    dataStart = dataStart.Substring(1);
                }
                string dataKoniec = dataStart.Substring(dataStart.IndexOf("<br>") + 4);
                if (dataKoniec.IndexOf("0") == 0)
                {
                    dataKoniec = dataKoniec.Substring(1);
                }
                dataStart = dataStart.Substring(0, dataStart.IndexOf("<br>"));
                if (dataKoniec == "")
                {
                    dataKoniec = dataStart;
                }
                string czasPodrozy = durationList.ElementAt(0).InnerHtml;
                int    nrPociagu   = Convert.ToInt32(numberList.ElementAt(0).Attributes["alt"].Value.Substring(3));
                int    opoznienie  = -1;
                //dane z IP
                for (int j = 0; j < connectionsList.Count(); j++)
                {
                    HtmlNode nodeIP = connectionsList.ElementAt(j);
                    IEnumerable <HtmlNode> aList = nodeIP.Descendants().Where(x => x.Name == "a" && x.Attributes.Contains("href") && x.Attributes["href"].Value.Contains("index_pociag.php"));
                    string nrPocIP = aList.ElementAt(0).InnerHtml;
                    nrPocIP = nrPocIP.Substring(0, nrPocIP.IndexOf(" "));
                    if (Convert.ToInt32(nrPocIP) == nrPociagu)
                    {
                        IEnumerable <HtmlNode> tdList = nodeIP.Descendants().Where(x => x.Name == "td" && x.Attributes.Contains("class") && x.Attributes["class"].Value == "in");
                        string op = tdList.ElementAt(5).InnerHtml;
                        opoznienie = Convert.ToInt32(op.Substring(0, op.IndexOf(" ")));
                        break;
                    }
                }
                Pociag train = new Pociag(nrPociagu, dataStart, dataKoniec, stacjaStart, stacjaKoniec, godzinaStart, godzinaKoniec, czasPodrozy, opoznienie, sel);
                pociagi.Add(train);
            }

            /*
             * StreamReader sr = new StreamReader(@"E:\pociagi-ip.txt");
             * string line;
             * line = sr.ReadLine();
             * while (line != "<td align=\"center\"><h4>Opóźnienie<br>odjazdu</h4></td>") line=sr.ReadLine();
             * line = sr.ReadLine();
             * line = sr.ReadLine();
             * line = sr.ReadLine();
             * while (line != "</table>")
             * {
             *  Pociag p = new Pociag();
             *  p.Wiersz = line.Substring(0, line.IndexOf("</tr>") + 5);
             *  line = line.Substring(line.IndexOf("</tr>") + 5);
             *  pociagi.Add(p);
             * }
             * for (int i = 0; i < pociagi.Count(); i++)
             * {
             *  line = pociagi[i].Wiersz;
             *  line=line.Substring(line.IndexOf("\">")+2);
             *  pociagi[i].NrPociagu = Convert.ToInt32(line.Substring(0, line.IndexOf(" ")));
             *  line=line.Substring(line.IndexOf(">201")+1);
             *  pociagi[i].Data=line.Substring(0,10);
             *  line=line.Substring(line.IndexOf("<b>")+3);
             *  pociagi[i].Relacja=line.Substring(0,line.IndexOf("</b>"));
             *  pociagi[i].Relacja=pociagi[i].Relacja.Replace("<br>"," - ");
             *  line=line.Substring(line.IndexOf("<td")+13);
             *  pociagi[i].Odjazd=line.Substring(0,5);
             *  line=line.Substring(line.IndexOf("<td")+13);
             *  pociagi[i].Opoznienie=Convert.ToInt32(line.Substring(0,line.IndexOf(" ")));
             * }
             */
        }