Avatar billede jackass- Nybegynder
06. august 2004 - 09:08 Der 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;
Avatar billede kammeyer Nybegynder
06. august 2004 - 09:17 #1
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.
Avatar billede kammeyer Nybegynder
06. august 2004 - 09:24 #2
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
Avatar billede kammeyer Nybegynder
06. august 2004 - 09:25 #3
rettelse:
lav en watch på Text, i og CmdList.count

(ja ja - har ikke fået min kaffe endnu og er lidt træt - gnider øjne)
Avatar billede jackass- Nybegynder
06. august 2004 - 09:34 #4
Ah ja selvfølgelig (klokken var også 02:30 i nat da jeg lavede det hehe - uden kaffe).

Selvf. lige en CmdList.add(Text); efter while løkken.

Lav den lige som et svar, så får du points :)
Avatar billede kammeyer Nybegynder
06. august 2004 - 10:04 #5
Svar  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester