public void ParseFile(string strPath) { //zle dodaje przystanki - ciagle pierwszy... //zle liczy czas jazdy // XmlTextReader xmlReader = new XmlTextReader(strPath); bool pierwszyPrzystanek = true; int aktualnaGodzina=0,aktualnaMinuta=0; string dzien = ""; Przystanek aktualnieObrabianyPrzystanek = null; string nazwaLinii = "", typLinii = "", idPrzystanku = "", nazwaPrzystanku = "", ulicaPrzystanku = ""; // Read the line of the xml file while (xmlReader.Read()) { switch (xmlReader.NodeType) { case XmlNodeType.Element: //zapisz dane obrabianej linii if (xmlReader.Name == "linia") { xmlReader.MoveToAttribute(0); nazwaLinii = xmlReader.Value; xmlReader.MoveToAttribute(1); typLinii = xmlReader.Value; break; } //dodaj wariant linii do bazy if (xmlReader.Name == "wariant") { linie.Add(new Linia(nazwaLinii,typLinii)); pierwszyPrzystanek = true; break; } //utworz aktualnie obrabiany przystanek if (xmlReader.Name == "przystanek") { xmlReader.MoveToAttribute(0); idPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(1); nazwaPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(2); ulicaPrzystanku = xmlReader.Value; //sprawdz czy taki przystanek juz jest aktualnieObrabianyPrzystanek = przystanki.Find( delegate(Przystanek p) { return p.id == idPrzystanku; } ); //jak go nie ma to go dodaj if (aktualnieObrabianyPrzystanek == null) { aktualnieObrabianyPrzystanek = new Przystanek(idPrzystanku, nazwaPrzystanku, ulicaPrzystanku); przystanki.Add(aktualnieObrabianyPrzystanek); } //dodaj do tego przystanku linie aktualnieObrabianyPrzystanek.dodajLinie(linie[linie.Count-1]); //jesli jest to pierwszy przystanek if (linie[linie.Count - 1].przystanki.Count == 0) { //dodaj go do linii z czasem 0 linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, 0); pierwszyPrzystanek = true; } else { pierwszyPrzystanek = false; } break; } //zapisz dzien (roboczy/sobota...) if(xmlReader.Name == "dzien") { xmlReader.MoveToAttribute(0); dzien = xmlReader.Value; break; } //zapisz godzine if (xmlReader.Name == "godz") { xmlReader.MoveToAttribute(0); aktualnaGodzina = Int32.Parse( xmlReader.Value); break; } //przerabianie minut; if (xmlReader.Name == "min") { xmlReader.MoveToAttribute(0); aktualnaMinuta = Int32.Parse(xmlReader.Value); //jesli przerabiamy pierwszy przystanek linii to kazda godzina jest godzina odjazdu z petli - trzeba je pododawac do linii if (pierwszyPrzystanek) { //dodaj nowy wyjazd dla linii - typ dnia (roboczy, sobota...) i pierwsza godizne linie[linie.Count - 1].wyjazd.Add(new Wyjazd(dzien, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, aktualnaGodzina%24, aktualnaMinuta, 0))); //znacznik dzien oznacza, ze juz nie ma wiecej godzin while (xmlReader.Read() && xmlReader.Name != "dzien") { if (xmlReader.Name == "godz" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); aktualnaGodzina = Int32.Parse(xmlReader.Value); } if (xmlReader.Name == "min" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); aktualnaMinuta = Int32.Parse(xmlReader.Value); //do obecnie przerabianego dnia (roboczy, sobota...) dodaj kolejne godziny linie[linie.Count - 1].wyjazd.Find( delegate(Wyjazd w) { return w.typDnia == dzien; } ).wyjazd.Add(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, aktualnaGodzina % 24, aktualnaMinuta, 0)); } } } //jesli jest to kolejny przystanek linii, to czas dojazdu na ten przystanek to pierwszy czas wyjazdu z petli i pierwszy autobus na tym przystanku else { //znajdzi pierwsza godzine wyjazd z petli DateTime wyjazd = linie[linie.Count - 1].wyjazd.Find( delegate(Wyjazd w) { return w.typDnia == dzien; } ).wyjazd[0]; //stworz godzine przyjazdu na podstawie odczytanych wczesniej danych DateTime przyjazd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,aktualnaGodzina%24,aktualnaMinuta,0); TimeSpan czas = przyjazd - wyjazd; //dodaj ten przystanek do linii z obliczonym czasem dojazdu linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes); //dopoki nie ma znacznika przystanek to sa tam godziny ktore nas juz nie interesuja. ta petla je pomija while (xmlReader.Name != "przystanek") xmlReader.Read(); //dopoki nie ma znacznika wariant to sa tam przystanki, dla ktorych nalezy obliczyc czas dojazdu while (xmlReader.Name != "wariant") { //tak jak poprzednio stworz dane o przystanku i jesli go nie ma to go dodaj if (xmlReader.Name == "przystanek" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); idPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(1); nazwaPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(2); ulicaPrzystanku = xmlReader.Value; aktualnieObrabianyPrzystanek = przystanki.Find( delegate(Przystanek p) { return p.id == idPrzystanku; } ); if (aktualnieObrabianyPrzystanek == null) { aktualnieObrabianyPrzystanek = new Przystanek(idPrzystanku, nazwaPrzystanku, ulicaPrzystanku); przystanki.Add(aktualnieObrabianyPrzystanek); } aktualnieObrabianyPrzystanek.dodajLinie(linie[linie.Count - 1]); //poniewaz ostatni przystanek nie ma godzin odjazdow, to nie ma tam znacznika <godz> ktory jest wylapywany przez ten algorytm //2 przyeczytania nie szkodza, gdyz albo trafimy na znacnzik tabliczka (nie ostatni przystanek), ktory jest ignorowany przez algorytm //albo trafimy na znacznik </przystanek> co oznacza, ze jest to ostatni przystanek linii i czas jazdy wynosi tyle samo co na przedostatni xmlReader.Read(); xmlReader.Read(); if (xmlReader.NodeType == XmlNodeType.EndElement) { //dzien ma 1440 minut, dlatego jesli autobus wyjezdza przed polnoca a dojezdza po, to nalezy poprawic wynik if (czas.TotalMinutes < 0) { linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes + 1440); } else { linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes); } } } if (xmlReader.Name == "godz" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); aktualnaGodzina = Int32.Parse( xmlReader.Value); continue; } if (xmlReader.Name == "min" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); aktualnaMinuta = Int32.Parse(xmlReader.Value); przyjazd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, aktualnaGodzina % 24, aktualnaMinuta, 0); czas = przyjazd - wyjazd; if (czas.TotalMinutes < 0) { linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes + 1440); } else { linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes); } while (xmlReader.Name != "tabliczka") xmlReader.Read(); } xmlReader.Read(); } } } break; case XmlNodeType.EndElement: break; case XmlNodeType.Text: richTextBox1.Text += xmlReader.Value + "\n"; break; default: break; } } }
public void dodajPrzystanek(Przystanek przystanek,int _czasJazdy) { przystanki.Add(przystanek); czasJazdy.Add(_czasJazdy); }
/* private void parseFile(string strPath) { //zle dodaje przystanki - ciagle pierwszy... //zle liczy czas jazdy // XmlTextReader xmlReader = new XmlTextReader(strPath); bool pierwszyPrzystanek = true; int aktualnaGodzina=0,aktualnaMinuta=0; string dzien = ""; Przystanek aktualnieObrabianyPrzystanek = null; string nazwaLinii = "", typLinii = "", idPrzystanku = "", nazwaPrzystanku = "", ulicaPrzystanku = ""; // Read the line of the xml file while (xmlReader.Read()) { switch (xmlReader.NodeType) { case XmlNodeType.Element: //zapisz dane obrabianej linii if (xmlReader.Name == "linia") { xmlReader.MoveToAttribute(0); nazwaLinii = xmlReader.Value; xmlReader.MoveToAttribute(1); typLinii = xmlReader.Value; break; } //dodaj wariant linii do bazy if (xmlReader.Name == "wariant") { linie.Add(new Linia(nazwaLinii,typLinii)); pierwszyPrzystanek = true; break; } //utworz aktualnie obrabiany przystanek if (xmlReader.Name == "przystanek") { xmlReader.MoveToAttribute(0); idPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(1); nazwaPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(2); ulicaPrzystanku = xmlReader.Value; //sprawdz czy taki przystanek juz jest aktualnieObrabianyPrzystanek = przystanki.Find( delegate(Przystanek p) { return p.id == idPrzystanku; } ); //jak go nie ma to go dodaj if (aktualnieObrabianyPrzystanek == null) { aktualnieObrabianyPrzystanek = new Przystanek(idPrzystanku, nazwaPrzystanku, ulicaPrzystanku); przystanki.Add(aktualnieObrabianyPrzystanek); } //dodaj do tego przystanku linie aktualnieObrabianyPrzystanek.dodajLinie(linie[linie.Count-1]); //jesli jest to pierwszy przystanek if (linie[linie.Count - 1].przystanki.Count == 0) { //dodaj go do linii z czasem 0 linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, 0); pierwszyPrzystanek = true; } else { pierwszyPrzystanek = false; } break; } //zapisz dzien (roboczy/sobota...) if(xmlReader.Name == "dzien") { xmlReader.MoveToAttribute(0); dzien = xmlReader.Value; break; } //zapisz godzine if (xmlReader.Name == "godz") { xmlReader.MoveToAttribute(0); aktualnaGodzina = Int32.Parse( xmlReader.Value); break; } //przerabianie minut; if (xmlReader.Name == "min") { xmlReader.MoveToAttribute(0); aktualnaMinuta = Int32.Parse(xmlReader.Value); //jesli przerabiamy pierwszy przystanek linii to kazda godzina jest godzina odjazdu z petli - trzeba je pododawac do linii if (pierwszyPrzystanek) { //dodaj nowy wyjazd dla linii - typ dnia (roboczy, sobota...) i pierwsza godizne linie[linie.Count - 1].wyjazd.Add(new Wyjazd(dzien, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, aktualnaGodzina%24, aktualnaMinuta, 0))); //znacznik dzien oznacza, ze juz nie ma wiecej godzin while (xmlReader.Read() && xmlReader.Name != "dzien") { if (xmlReader.Name == "godz" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); aktualnaGodzina = Int32.Parse(xmlReader.Value); } if (xmlReader.Name == "min" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); aktualnaMinuta = Int32.Parse(xmlReader.Value); //do obecnie przerabianego dnia (roboczy, sobota...) dodaj kolejne godziny linie[linie.Count - 1].wyjazd.Find( delegate(Wyjazd w) { return w.typDnia == dzien; } ).wyjazd.Add(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, aktualnaGodzina % 24, aktualnaMinuta, 0)); } } } //jesli jest to kolejny przystanek linii, to czas dojazdu na ten przystanek to pierwszy czas wyjazdu z petli i pierwszy autobus na tym przystanku else { //znajdzi pierwsza godzine wyjazd z petli DateTime wyjazd = linie[linie.Count - 1].wyjazd.Find( delegate(Wyjazd w) { return w.typDnia == dzien; } ).wyjazd[0]; //stworz godzine przyjazdu na podstawie odczytanych wczesniej danych DateTime przyjazd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,aktualnaGodzina%24,aktualnaMinuta,0); TimeSpan czas = przyjazd - wyjazd; //dodaj ten przystanek do linii z obliczonym czasem dojazdu linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes); //dopoki nie ma znacznika przystanek to sa tam godziny ktore nas juz nie interesuja. ta petla je pomija while (xmlReader.Name != "przystanek") xmlReader.Read(); //dopoki nie ma znacznika wariant to sa tam przystanki, dla ktorych nalezy obliczyc czas dojazdu while (xmlReader.Name != "wariant") { //tak jak poprzednio stworz dane o przystanku i jesli go nie ma to go dodaj if (xmlReader.Name == "przystanek" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); idPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(1); nazwaPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(2); ulicaPrzystanku = xmlReader.Value; aktualnieObrabianyPrzystanek = przystanki.Find( delegate(Przystanek p) { return p.id == idPrzystanku; } ); if (aktualnieObrabianyPrzystanek == null) { aktualnieObrabianyPrzystanek = new Przystanek(idPrzystanku, nazwaPrzystanku, ulicaPrzystanku); przystanki.Add(aktualnieObrabianyPrzystanek); } aktualnieObrabianyPrzystanek.dodajLinie(linie[linie.Count - 1]); //poniewaz ostatni przystanek nie ma godzin odjazdow, to nie ma tam znacznika <godz> ktory jest wylapywany przez ten algorytm //2 przyeczytania nie szkodza, gdyz albo trafimy na znacnzik tabliczka (nie ostatni przystanek), ktory jest ignorowany przez algorytm //albo trafimy na znacznik </przystanek> co oznacza, ze jest to ostatni przystanek linii i czas jazdy wynosi tyle samo co na przedostatni xmlReader.Read(); xmlReader.Read(); if (xmlReader.NodeType == XmlNodeType.EndElement) { //dzien ma 1440 minut, dlatego jesli autobus wyjezdza przed polnoca a dojezdza po, to nalezy poprawic wynik if (czas.TotalMinutes < 0) { linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes + 1440); } else { linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes); } } } if (xmlReader.Name == "godz" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); aktualnaGodzina = Int32.Parse( xmlReader.Value); continue; } if (xmlReader.Name == "min" && xmlReader.HasAttributes) { xmlReader.MoveToAttribute(0); aktualnaMinuta = Int32.Parse(xmlReader.Value); przyjazd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, aktualnaGodzina % 24, aktualnaMinuta, 0); czas = przyjazd - wyjazd; if (czas.TotalMinutes < 0) { linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes + 1440); } else { linie[linie.Count - 1].dodajPrzystanek(aktualnieObrabianyPrzystanek, (int)czas.TotalMinutes); } while (xmlReader.Name != "tabliczka") xmlReader.Read(); } xmlReader.Read(); } } } break; case XmlNodeType.EndElement: break; case XmlNodeType.Text: richTextBox1.Text += xmlReader.Value + "\n"; break; default: break; } } }*/ private void parseFile2(string strPath) { List<DateTime> czasy = new List<DateTime>(); int godzina=0,minuta=0; Przystanek aktualnyPrzystanek = null; string dzien = ""; string nazwaLinii = "", typLinii = "", nazwaWariantu="", idPrzystanku = "", nazwaPrzystanku = "", ulicaPrzystanku = ""; bool pierwszyPrzystanek = true; XmlTextReader xmlReader = new XmlTextReader(strPath); while(xmlReader.Read()) { switch (xmlReader.NodeType) { case XmlNodeType.Element: { switch (xmlReader.Name) { case "linia": { xmlReader.MoveToAttribute(0); nazwaLinii = xmlReader.Value; xmlReader.MoveToAttribute(1); typLinii = xmlReader.Value; break; } case "wariant": { xmlReader.MoveToAttribute(1); nazwaWariantu = xmlReader.Value; linie.Add(new Linia(nazwaLinii,typLinii,nazwaWariantu)); pierwszyPrzystanek = true; while (xmlReader.Read() && xmlReader.Name != "wariant") { switch (xmlReader.NodeType) { case XmlNodeType.Element: { switch (xmlReader.Name) { case "przystanek": { xmlReader.MoveToAttribute(0); idPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(1); nazwaPrzystanku = xmlReader.Value; xmlReader.MoveToAttribute(2); ulicaPrzystanku = xmlReader.Value; //sprawdz czy taki przystanek juz jest aktualnyPrzystanek = przystanki.Find( delegate(Przystanek p) { return p.nazwa == nazwaPrzystanku; } ); //jak go nie ma to go dodaj if (aktualnyPrzystanek == null) { aktualnyPrzystanek = new Przystanek(idPrzystanku, nazwaPrzystanku, ulicaPrzystanku); przystanki.Add(aktualnyPrzystanek); } //dodaj do tego przystanku linie aktualnyPrzystanek.dodajLinie(linie[linie.Count - 1]); if (linie[linie.Count - 1].przystanki.Count == 0) { //dodaj go do linii z czasem 0 linie[linie.Count - 1].dodajPrzystanek(aktualnyPrzystanek, 0); pierwszyPrzystanek = true; } else { pierwszyPrzystanek = false; } break; } case "dzien": { xmlReader.MoveToAttribute(0); dzien = xmlReader.Value; break; } case "godz": { xmlReader.MoveToAttribute(0); godzina = Int32.Parse(xmlReader.Value); break; } case "min": { xmlReader.MoveToAttribute(0); minuta = Int32.Parse(xmlReader.Value); break; } default: break; } break; } case XmlNodeType.EndElement: { if (pierwszyPrzystanek) { if (xmlReader.Name == "min") { czasy.Add(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, godzina, minuta, 0)); } if (xmlReader.Name == "dzien") { linie[linie.Count - 1].wyjazd.Add(new Wyjazd(dzien, czasy)); } } else { if (xmlReader.Name == "min") { DateTime wyjazd = linie[linie.Count - 1].wyjazd.Find( delegate(Wyjazd w) { return w.typDnia == dzien; } ).wyjazd[0]; DateTime przyjazd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, godzina, minuta, 0); TimeSpan czasDojazdu = przyjazd - wyjazd; linie[linie.Count - 1].dodajPrzystanek(aktualnyPrzystanek, (int)czasDojazdu.TotalMinutes); while (xmlReader.Name != "dzien" && xmlReader.Read()); } } break; } default: break; } } break; } //default dla Element default: break; } break; } //default glownego switcha default: break; } } }