/// <summary> /// Rozbijamy plik z przekrojami na pojedyncze pliki (tylko obiekty typu Przekrój) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void importujPrzekrojeMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Plik z przekrojami (*.txt)|*.txt"; dialog.Title = "Wybiersz plik zestawień przekroi"; if (dialog.ShowDialog(this) != DialogResult.OK) { return; } StreamReader reader = new StreamReader(dialog.FileName, Encoding.GetEncoding(1250)); string wiersz = null; //(00) Lp. np. 2 //(01) Nazwa cieku np. Pasłęka //(02) Numer obiekt //(03) Numer przekroju i punktu pomiarowego np. 240.02 //(04) Typ obiektu np. Przekrój //(05) Kod punktu np. 1 //(06) Kod formy pokrycia terenu np. T01 //(07) Kilometraż //(08) Współrzędna X np. 640648.68 //(09) Współrzędna Y np. 587563.95 //(10) Z rzędna [m n.p.m.] np. 147.89 //(11) Rzędna zw. Wody //(12) H - wysokość progu przelewowego [m] //(13) α - kąt skrzyżowania głównej osi mostu z osią cieku //(14) Data pomiaru np. 7-02-2012 //(15) Numer fotografii np. 243a.jpg; 243b.jpg //(16) Administrator obiektu Dictionary <string, List <Pikieta> > przekroje = new Dictionary <string, List <Pikieta> >(); Dictionary <string, int> obiekty = new Dictionary <string, int>(); Dictionary <string, AtrybutySzkicu> atrybuty = new Dictionary <string, AtrybutySzkicu>(); //00 Nazwa //01 Nr_obiekt //02 Typ_obiekt //03 Nr_pkt //04 X //05 Y //06 Z //07 M //08 Kod_pikiet //09 Kod_pokr //10 Rzedna_ZW //11 Data //12 Foto //13 Szer_mostu //14 H_progu //15 Admin //16 Uwagi while ((wiersz = reader.ReadLine()) != null) { string[] cols = wiersz.Split('\t'); //Kolumny powinny być rozdzielone tabulacjami if (cols.Length < 15) { continue; //Za mało kolumn w wierszu } string nazwaCieku = cols[Settings.Default.NazwaCieku]; string numerObiekt = cols[Settings.Default.NumerObiekt]; string numerPrzekroju = cols[Settings.Default.NumerPunktu]; //nazwa pliku, numer punktu string typObiektu = cols[Settings.Default.TypObiekt].Trim().ToLower(); //powinien być typu Przekrój string kodPunktu = cols[Settings.Default.KodPikiety]; //kod punktu powinien być prawidłowy string kodFormy = cols[Settings.Default.KodPokrycia]; //kod formy powinien być prawidłowy string wspX = cols[Settings.Default.WspX]; string wspY = cols[Settings.Default.WspY]; string wspZ = cols[Settings.Default.WspZ]; string dataPomiaru = cols[Settings.Default.DataPomiaru]; string zdjecia = cols[Settings.Default.Foto].Replace("\"", "").Trim(); //numery zdjęć powinny być zgodne //string administrator = cols[16]; string przekroj = numerPrzekroju.Split('.')[0]; //parse np. 240.02 if (numerPrzekroju.EndsWith(".01")) { if (!obiekty.ContainsKey(typObiektu)) { obiekty.Add(typObiektu, 0); } obiekty[typObiektu]++; if (!atrybuty.ContainsKey(przekroj)) { AtrybutySzkicu atrybutySzkicu = new AtrybutySzkicu(); atrybuty.Add(przekroj, atrybutySzkicu); atrybutySzkicu.Numer = przekroj; atrybutySzkicu.NazwaCieku = nazwaCieku; atrybutySzkicu.NumerObiektu = numerObiekt; atrybutySzkicu.DataSzkicu = dataPomiaru; if (!string.IsNullOrEmpty(zdjecia)) { string[] fotografie = zdjecia.Split(';'); for (int i = 0; i < fotografie.Length; i++) { fotografie[i] = fotografie[i].Split('.')[0].Trim(); } atrybutySzkicu.Fotografie = fotografie; } else { atrybutySzkicu.Fotografie = new string[0]; } } } if (typObiektu != "przekrój") { continue; //pomijamy obiekty inne niż przekroje } //Zakładamy nową liste punktów przekroju, jeżeli jeszcze nie została utworzona if (!przekroje.ContainsKey(przekroj)) { przekroje.Add(przekroj, new List <Pikieta>()); } Pikieta pikieta = new Pikieta(numerPrzekroju, kodFormy, double.Parse(wspX), double.Parse(wspY)); pikieta.Rzedna = double.Parse(wspZ); przekroje[przekroj].Add(pikieta); } reader.Close(); foreach (KeyValuePair <string, List <Pikieta> > kv in przekroje) { string numer = kv.Key; string numerPrzekroju = numer; string przekrojPlik = Path.Combine(Path.GetDirectoryName(dialog.FileName), numerPrzekroju + ".xml"); AtrybutySzkicu atrybutySzkicu = atrybuty[numer]; List <Pikieta> punkty = kv.Value; Szkic szkic = new Szkic(atrybutySzkicu.NazwaCieku, numerPrzekroju); szkic.DataPomiaru = atrybutySzkicu.DataSzkicu; szkic.NumerObiektu = atrybutySzkicu.NumerObiektu; szkic.NowaGranica(_granica); szkic.Pikiety = punkty; szkic.ZbudujSzkielet(); //skalowanie tylko przy imporcie foreach (string foto in atrybutySzkicu.Fotografie) { Fotografia fotografia = new Fotografia(foto); szkic.DodajFotografia(fotografia); } szkic.ToXML(przekrojPlik); } string msg = ""; foreach (KeyValuePair <string, int> kv in obiekty) { msg += string.Format("\n{0}: {1} {2}", kv.Key, kv.Value, kv.Key == "przekrój" ? "(" + przekroje.Count + " zapisane)" : ""); } MessageBox.Show(this, string.Format("Zestawienie obiektów w pliku\n{0}\n", msg), "Import przekroi...", MessageBoxButtons.OK, MessageBoxIcon.Information); }