Index je mimo hranice pole.   zodpovězená otázka

VB.NET

Dobrý den.

Mám takový menší problém.

Mám treeview a do nich se automaticky třídí Jména a třídy z txt databáze.

V txt databázy to vypadá následovně.

Jmeno

třída

jmeno

třída

...

A je tam asi 800 řádku a když chci spustit program tak to hodí hlášku "index je mimo hranice pole."

************** Text výjimky **************

System.IndexOutOfRangeException: Index je mimo hranice pole.

v Recepce_2.Form1._Lambda$1(Zak zak) v C:\Documents and Settings\Sonda\Dokumenty\Visual Studio 2010\Projects\Recepce 2\Recepce 2\Form1.vb:řádek 211

v System.Linq.Lookup`2.Create[TSource](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)

v System.Linq.GroupedEnumerable`4.GetEnumerator()

v System.Linq.Buffer`1..ctor(IEnumerable`1 source)

v System.Linq.OrderedEnumerable`1.<GetEnumerator>d0.MoveNext()

v System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()

v System.Linq.Buffer`1..ctor(IEnumerable`1 source)

v System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)

v Recepce_2.Form1.Form1_Load(Object sender, EventArgs e) v C:\Documents and Settings\Sonda\Dokumenty\Visual Studio 2010\Projects\Recepce 2\Recepce 2\Form1.vb:řádek 210

v System.EventHandler.Invoke(Object sender, EventArgs e)

v System.Windows.Forms.Form.OnLoad(EventArgs e)

v System.Windows.Forms.Form.OnCreateControl()

v System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)

v System.Windows.Forms.Control.CreateControl()

v System.Windows.Forms.Control.WmShowWindow(Message& m)

v System.Windows.Forms.Control.WndProc(Message& m)

v System.Windows.Forms.ScrollableControl.WndProc(Message& m)

v System.Windows.Forms.ContainerControl.WndProc(Message& m)

v System.Windows.Forms.Form.WmShowWindow(Message& m)

v System.Windows.Forms.Form.WndProc(Message& m)

v System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

v System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

v System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

A nevím co s tím.

Děkuji předem

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Ve vbnet tohle http://prntscr.com/1t8n2h

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

V kódu (v obrázku) se snažíte provést group nad seznamem žáků podle prvního znaku jejich jména. S velkou pravděpodobností se vám tedy do seznamu dostalo jméno, které je rovno prázdnému řetězci (asi máte někde ve vstupním souboru prázdný řádek a nemáte to vůbec nijak ošetřené).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, máte pravdu, já tupec... Fakt moc děkuji, já jsem si to doopravdy neuvědomil

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jenom můžeš mi napsat nějaký kód pro tuhle chybu? Mě týden hlava nebere. Předem mooc děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud není formát vstupního souboru pevně stanoven jako součástí zadání/požadavků zákazníka (tj. pokud je jeho návrh ve vaší režii) zvážil bych použití jiného formátu např. velmi jednoduchého XML.

V opačném případě bych postupoval například tak, že bych si pro čtení vstupního souboru připravil samostatnou metodu. V té bych pak ošetřil, že například mezi daty jednoho "záznamu" umožním existenci prázdných řádků a dále ošetřím zda některý povinný údaj nechybí:

Private Shared Function ReadInputFile(path As String) As IEnumerable(Of Zak)
	Using reader = New StreamReader(path)
		While Not reader.EndOfStream
			'Prázdné řádky na začátku "záznamu" se ignorují.
			Dim jmeno As String
			Do
				jmeno = reader.ReadLine()
				If jmeno Is Nothing Then
					'Konec souboru
					yield Exit Do
				End If
			Loop While jmeno.Length = 0

			Dim nazevTridy As String = reader.ReadLine()
			If String.IsNullOrEmpty(nazevTridy) Then
				Throw New InvalidDataException("Špatný formát souboru.")
			End If

			yield Return New Zak() With { .Jmeno = jmeno, .NazevTridy = nazevTridy }
		End While
	End Using
End Function
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Velice moc děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback