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();
                        }

                    }
}