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;
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.