Cześć,
Mam za zadanie stworzyć program sprawdzający poprawność identyfikatorów działek (wiem, że to raczej z pogranicza katastru nieruchomości, czyli geodezji, ale do tego nie trzeba znać się na tej działce, choć dla zainteresowanych poprawnością licznych w kodzie wątków if-else polecam to: http://isap.sejm.gov.pl/isap.nsf/download.xsp/WDU20160001034/O/D20161034.pdf strony 69, 87-88, 92-96 (OFU,OZU, OZK) i 294-301) Moim pomysłem jest po podaniu obrębu działki wyświetlenie poprawnych numerów ewidencyjnych wraz z jej typami do dwóch richTextBox-ów. Jeden ma pokazywać poprawne (stąd tyle ifów), a drugi błędne wpisane identyfikatory. Problemem jest to że wywala po kliknięciu przyciska "wczytaj" komunikat: System.ArgumentOutOfRangeException wraz z dopiskiem „Indeks i długość muszą odwoływać się do lokalizacji w ciągu" na pierwszym warunku zaraz po pętli. Zaznaczę, że interesują mnie tylko nr obrębów, a nie całe linijki ze współrzędnymi działki (przykładowy plik w załączniku- ma być około 40 błędów) Całą "akcję" programu podaje poniżej. Proszę was bardzo serdecznie o pomoc w tej sprawie
List<string> poprawne = new List<string>();//Poprawne wartości wpisywane będą do listy stringów
List<string> bledy = new List<string>();//...a błędne do drugiego
for (int i = 0; i < lines.Length; ++i)
{
string linijka = lines[i];
string nrObrebu = textBox1.Text + '-';//w oddzielnym tekst boxie należy podać nr obrębu po czym dodaje myślnik
linijka = linijka.Trim();//usuwa białe spacje
if (linijka.Length >= 3 && linijka.Substring(0, 3) == nrObrebu)// jeśli zaczyna się od numeru obrębu to czytamy dalej
{
for (int j = 0; j < linijka.Length; ++j)
{
if (linijka[j] == '/')//w każdej linijce musi być ukośnik
{
//zapisuje wszystkie wartości poprawne do jednej listy stringów
if (linijka [j + 1] == 'R' || linijka.Substring (j + 1, 3) == "E-R")
{
if (OZUdlaR.Contains(linijka.Substring(i + 2)))//czyta do końca linijki
{
poprawne.Add(linijka);//Zapisz do stringa
}
else if (linijka [j + 2] == '-')
{
if (linijka [j + 3] == 'S' || linijka [j + 3] == 'Ł' || linijka.Substring (j + 3, 2) == "Ps" || linijka.Substring (j + 3, 2) == "Ls" || linijka.Substring (j + 3, 2) == "Lz" || linijka.Substring(j + 3, 3) == "E-Ł" || linijka.Substring(j + 3, 4) == "E-Ps" || linijka.Substring(j + 3, 4) == "E-Ls" || linijka.Substring(j + 3, 4) == "E-Lz")
{ //dla dwu literowych inaczej!
if (OZUnieR.Contains(linijka.Substring(j + 4)) || OZUnieR.Contains(linijka.Substring(j + 5)))
{
poprawne.Add(linijka);
}
else
{
bledy.Add(linijka);
}
}
}
else
{
bledy.Add(linijka);//Zapisz do stringa
}
}
else if (linijka.Substring (j + 1, 3) == "Br-" || linijka.Substring (j + 1, 3) == "Lzr" || linijka.Substring (j + 1, 3) == "Wsr" || linijka.Substring(j + 1, 5) == "E-Lzr" || linijka.Substring (j + 1, 4) == "E-Wp" || linijka.Substring(j + 1, 4) == "E-Ws" || linijka.Substring(j + 1, 3) == "E-N")
{
poprawne.Add(linijka);
}
else if (linijka [j + 1] == 'S' || linijka [j + 1] == 'Ł' || linijka.Substring (j + 1, 2) == "Ps" || linijka.Substring (j + 1, 2) == "Ls" || linijka.Substring (j + 1, 2) == "Lz" || linijka.Substring (j + 1, 3) == "E-Ł" || linijka.Substring(j + 1, 4) == "E-Ps" || linijka.Substring(j + 1, 4) == "E-Ls" || linijka.Substring(j + 1, 4) == "E-Lz")
{ //dla dwu literowych inaczej!
if (OZUnieR.Contains(linijka.Substring(j + 2)) || OZUnieR.Contains(linijka.Substring(j + 3)))
{
poprawne.Add(linijka);
}
else if (linijka [j + 2] == '-')
{
if (linijka [j + 3] == 'Ł' || linijka.Substring (j + 3, 2) == "Ps" || linijka.Substring (j + 3, 2) == "Ls" || linijka.Substring (j + 3, 2) == "Lz" || linijka.Substring(j + 3, 3) == "E-Ł" || linijka.Substring(j + 3, 4) == "E-Ps" || linijka.Substring(j + 3, 4) == "E-Ls" || linijka.Substring(j + 3, 4) == "E-Lz")
{ //dla dwu literowych inaczej!
if (OZUnieR.Contains(linijka.Substring(j + 4)) || OZUnieR.Contains(linijka.Substring(j + 5)))
{
poprawne.Add(linijka);
}
else
{
bledy.Add(linijka);
}
}
}
else
{
bledy.Add(linijka);
}
}
else if (linijka [j + 1] == 'B' || linijka [j + 1] == 'W' || linijka [j + 1] == 'N' || linijka [j + 1] == 'K')
{
poprawne.Add(linijka);
}
else if (linijka.Substring (j + 1, 2) == "Ba" || linijka.Substring (j + 1, 2) == "Bi" || linijka.Substring (j + 1, 2) == "Wm" || linijka.Substring (j + 1, 2) == "Ws" || linijka.Substring (j + 1, 2) == "Wp" || linijka.Substring (j + 1, 2) == "Ti" || linijka.Substring (j + 1, 2) == "Tr" || linijka.Substring (j + 1, 2) == "Tk" || linijka.Substring (j + 1, 2) == "dr" || linijka.Substring (j + 1, 2) == "Ti" || linijka.Substring (j + 1, 2) == "Bp" || linijka.Substring (j + 1, 2) == "Bz")
{
poprawne.Add(linijka);
}
else
{
bledy.Add(linijka);
}
}
else// jeśli nie ma ukośnika to jest błąd
{
bledy.Add(linijka);
}
}
richTextBox1.Lines = poprawne.ToArray();
}
else if (linijka.Length >= 3 && linijka.Substring(0, 3) == " ")//Jeśli jest string pusty to informujemy użytkownika
{
MessageBox.Show("Nie podano numeru obrębu");
}
else
{
richTextBox2.Lines = bledy.ToArray();
}
}
}
- dzialki_test.txt (342 KB) - ściągnięć: 132