06. august 2004 - 09:08Der er
4 kommentarer og 1 løsning
TStringList - listindex out of bounds error
Heys.. jeg er ved at lege lidt med en IRC klient, og i nedenstående splitter jeg en string ved spaces og finder ud af om bruger har skrevet '#' foran kanalnavn. Men når jeg fx skriver "/join #testchan" får jeg en error: "ListIndex out of bounds"
Nogen der kan fortælle hvorfor?! :/
CmdList := TStringList.Create; try i := pos(' ', Text); while i > 0 do begin CmdList.add(Copy(Text, 1, i-1)); delete(Text, 1, i); i := pos(' ', Text); end;
if CmdList[0] = '/join' then begin s := cmdlist[1]; if ( (s <> '') and (s[1] = '#') ) then fMainForm.IRC.Join(CmdList[1]) else fMainForm.IRC.Join('#'+CmdList[1]); end; finally CmdList.Free; end;
pos finder kun 1 mellemrum - og din while bør derfor kun køre 1 gang. Dvs. den lægger kun /join op i din liste - ikke #testchan (så vidt jeg kan se uden at ha' fået min morgenkaffe endnu). Og derfor når du spørger på CmdList[0] = '/join' så forventer _du_ at der er en parameter mere, men den er der bare ikke - og du refererer til den cmdlist[1] uden at have testet for om der er en mere.
du bør - efter løkken - spørge om length(Text) > 0 så du kan se om der er en parameter du er ved at misse - er der det, så smid den i listen: CmdList.add(Text) //Text indeholder kun 1 parameter nu (eller et ord om du vil) Ellers - smid en del showmessage(Text) ud så du kan holde øje med værdien af Text - eller eller debug programmet og lav en watch på Text og i CmdList.count
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.