Problem z odczytaniem z pliku do List<>. Przekroczono zakres.

0

Wczytuję plik, część pliku do listaPl, część do listaAng. W aplikacji konsolowej wszystko działo poprawnie, to trochę dodałem zawartości do pliku tekstowego i pojawił się problem. I teraz tworzę aplikację WindowsForms. Poniżej metoda:

        //metoda, do odczytywania dowolnej Bazy
        private void odczytajDane(string path)
        {
            // Open the file to read from.
            string[] readText = File.ReadAllLines(path, Encoding.UTF8);
            for (int i = 0; i < readText.Length; i++)
            {
                try
                {
                    string[] obaSlowa = readText[i].Split(',');
                    listaPl.Add(obaSlowa[0]);
                    listaAng.Add(obaSlowa[1]);//debugger podpowiada, że tu jest błąd
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Wystąpił błąd podczas wczytywania danych." +ex,"Błąd aplikacji");
                }
            }

        }
 

Tutaj treść błędu:user image
Adres do screena http://cid-feb83b6a314b31a4.office.live.com/self.aspx/.Public/B%C5%82ad.bmp
Zawartość pliku txt:

dom,house
jabłko,apple
słowo,word
tylko, że dużo więcej...
0

Ostatni wiersz który odczytasz będzie pustym wierszem.
Jeżeli podzielisz go splitem wyjdzie tabela o długości 1 a ty sięgasz do drugiego elementu.
Wystarczy pominąć puste wiersze.

0

Czy mógłbyś napisać przykładowy kod jak pominąć puste wiersze, tak żeby nie było już problemu?

0

Podawanie gotowego kodu nie jest pomocne.

Interesujące Cię linijki pliku zawierają dwa słowa oddzielone przecinkiem. Zanim dodasz te słowa do list upewnij się po prostu, czy są oba. Chyba wiesz jak to zrobić?

0

Czy dobrze sprawdzam, że te słowa tam są? Jak poprawnie usunąć puste wiersze?

 
        private void odczytajDane(string path)
        {
            // Open the file to read from.
            string[] readText = File.ReadAllLines(path, Encoding.UTF8);
            for (int i = 0; i < readText.Length; i++)
            {
                try
                {
                    string[] obaSlowa = readText[i].Split(',');
                    if (obaSlowa[0] != null && obaSlowa[1]!=null)
                    {
                        listaPl.Add(obaSlowa[0]);
                        listaAng.Add(obaSlowa[1]);
                    }
                    else
                    {
                        // tutaj usuwamy puste miejsca
                        obaSlowa[0].Remove(0,1); //próbowałem jakoś tak, ale to źle jest
                        obaSlowa[1].Remove(0, 1);
                        
                    }
                        
                            
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Wystąpił błąd podczas wczytywania danych." +ex,"Błąd aplikacji");
                }
            }

        }
0

W ifie dałbym obaSlowa.Length == 2, bo jeśli są dwa, to jest dobrze, a jeśli nie, to jest źle.

Jakie puste wiersze chcesz usuwać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1