15. februar 2004 - 14:18
Der er
31 kommentarer og 1 løsning
Problem med array "Indekset er uden for området"
Jeg har lidt problemer med mine arrays, eller i hvert fald det ene. Min kode: if file.Size > 1024 then nysize = file.Size / 1024 arrkb = split(nysize, ",") if nysize > 1024 then nysize = nysize / 1024 arrmb = split(nysize, ",") 'if nysize > 1024 then 'nysize = nysize / 1024 'arrgb = split(nysize, ",") 'nysize = arrgb(0) & "," & (left(arrgb(1), 2)) & " GB" 'else nysize = arrmb(0) & "," & (left(arrmb(1), 2)) & " MB" 'end if else nysize = arrkb(0) & "," & (left(arrkb(1), 2)) & " KB" end if else nysize = file.Size end if Når jeg kører scriptet får jeg denne fejl: Indekset er uden for området: '[number: 1]' /cddb/www/admin/showdir.asp, line 44 line 44: nysize = arrkb(0) & "," & (left(arrkb(1), 2)) & " KB" Umiddelbart ville jeg tro at det er "arrkb(1)" der er problemet. Men jeg ved det ikke - jeg har ikke fået denne fejl før. :-/ Inputtet "file.Size" er altid et helt tal mellem 0-1000000000000(ca. ;) ) Jeg håber der nogle der kan hjælpe mig.
Annonceindlæg fra Deloitte
15. februar 2004 - 14:23
#1
Det er det også, det kunne tyde på at nysize ikke hvad den værdi du regner med. Hvorfor ikke bruge formatnumber?? nysize = FormatNumer(nysize,2) & " KB"
15. februar 2004 - 14:26
#2
Fejlen kommer nok fordi der en fil hvor denne divition går op altså det giver ikke et komma tal, hvis filen er 1024 bytes giver 1024 / 1024 = 1. Når man spliter på "," giver det kun en celle i arrayet. nysize = nysize / 1024
15. februar 2004 - 14:27
#3
Nåå ja! Det er da klart.
15. februar 2004 - 14:28
#4
Så må det vel være nogle i denne stil: if nysize <> 1 then bla bla eller er der en mere elegant måde?
15. februar 2004 - 14:30
#5
Sludder! Det skal jo være instr(nysize, ".")
15. februar 2004 - 14:34
#6
hvis der . i skal du vel også splitte på . og ikke , Du kan tilføje efter split en inStr: nysize = nysize / 1024 if inStr(nysize, ",")=0 then nysize = nysize & ",00" arrkb = split(nysize, ",")
15. februar 2004 - 14:39
#7
Nej, jeg tog fejl - det er , ikke . Det virker nu. :D Her er den færdige kode: if file.Size > 1024 then nysize = file.Size / 1024 if instr(nysize, ",") then arrkb = split(nysize, ",") if nysize > 1024 then nysize = nysize / 1024 if instr(nysize, ",") then arrmb = split(nysize, ",") 'if nysize > 1024 then ' nysize = nysize / 1024 ' arrgb = split(nysize, ",") ' nysize = arrgb(0) & "," & (left(arrgb(1), 2)) & " GB" 'else nysize = arrmb(0) & "," & (left(arrmb(1), 2)) & " MB" 'end if else nysize = nysize & " MB" end if else nysize = arrkb(0) & "," & (left(arrkb(1), 2)) & " KB" end if else nysize = nysize & " KB" end if else nysize = file.Size end if
15. februar 2004 - 14:40
#8
Ved du om man kan optimere det her? Jeg bruger det til at indeksere mine CDere - der kan godt være MANGE filer på. :)
15. februar 2004 - 14:49
#9
Ok :) Tja du kan måske prøve noget som dette, men om det mere optimeret tja.. :) <% nysize = file.Size i = 0 '0=bytes ; 1=kbytes ; 2=Mbytes ; 3 = Gbytes do while nysize > 1024 and i < 3 nysize = nysize / 1024 i=i+1 loop if inStr(nysize, ",")=0 then nysize = nysize & ",00" arr = split(nysize, ",") nysize = arr(0) 'Sæt enten KB,MB eller GB Select case i case 1 nysize = nysize & "," & (left(arr(1), 2)) & " KB" case 2 nysize = nysize & "," & (left(arr(1), 2)) & " MB" case 3 nysize = nysize & "," & (left(arr(1), 2)) & " GB" end select %>
15. februar 2004 - 14:53
#10
Hmmm...Det ser sguda meget godt ud. :) Meeenn hvis nu jeg ikke vil have ",00" med, hvordan vil det så se ud?
15. februar 2004 - 14:55
#11
Og kan man sætte en tusind-tals seperator(her ".") ind?
15. februar 2004 - 14:55
#12
Den giver ,00 hvis det er Kb og Mb hvis det er i nytes skriver den kun bytes tallet.
15. februar 2004 - 14:58
#13
Ja, men jeg vil slet ikke have en ",00" på mine filstørrelser. :)
15. februar 2004 - 14:59
#14
Som jeg først skrev så tror jeg du skal havde fat i FormatNumber som kan formatere et tal med tusind seperator mm.: <% nysize = file.Size i = 0 '0=bytes ; 1=kbytes ; 2=Mbytes ; 3 = Gbytes do while nysize > 1024 and i < 3 nysize = nysize / 1024 i=i+1 loop if inStr(nysize, ",")=0 then nysize = nysize & ",00" arr = split(nysize, ",") nysize = FormatNumer(arr(0),0,0,0,-1) 'Sæt enten KB,MB eller GB Select case i case 1 nysize = nysize & "," & (left(arr(1), 2)) & " KB" case 2 nysize = nysize & "," & (left(arr(1), 2)) & " MB" case 3 nysize = nysize & "," & (left(arr(1), 2)) & " GB" end select %>
15. februar 2004 - 15:00
#15
ok ingen ,00 men du vil godt hvade ,35 på ?
15. februar 2004 - 15:00
#16
Yes, please. :)
15. februar 2004 - 15:06
#17
Så prøv sådan her: <% nysize = file.Size i = 0 '0=bytes ; 1=kbytes ; 2=Mbytes ; 3 = Gbytes do while nysize > 1024 and i < 3 nysize = nysize / 1024 i=i+1 loop arr = split(nysize, ",") nysize = FormatNumer(arr(0),0,0,0,-1) if Ubound(arr)>=1 then nysize = nysize & "," & (left(arr(1), 2)) end if 'Sæt enten KB,MB eller GB Select case i case 1 nysize = nysize & " KB" case 2 nysize = nysize & " MB" case 3 nysize = nysize & " GB" end select %>
15. februar 2004 - 15:09
#18
Den der 'FormatNumer' virker ikke korrekt. Der kommer denne fejl: Typer stemmer ikke overens: 'FormatNumer' Hvordan kommer man udenom den? Jeg har prøvet int(nysize) og int(arr(0)), men det hjælper ikke.
15. februar 2004 - 15:17
#19
der mangler også et b :) nysize = FormatNubmer(arr(0),0,0,0,-1)
15. februar 2004 - 15:19
#20
Ja, det fandt jeg også lige ud af. Men så kommer denne fejl: Indekset er uden for området: '[number: 1]' I denne linie: case 2
15. februar 2004 - 15:22
#21
Nu kommer den i 44: nysize = nysize & "," & (left(arr(1), 2)) & " KB" Det giver også mere mening. :)
15. februar 2004 - 15:22
#22
det forstår jeg ikke der da ikke oget indexseret område??
15. februar 2004 - 15:23
#23
Jeg tror, jeg så forkert første gang.
15. februar 2004 - 15:23
#24
arj, prøv kode som vist 15/02-2004 15:06:59 Hvor select case' en er lavet om til dette: Select case i case 1 nysize = nysize & " KB" case 2 nysize = nysize & " MB" case 3 nysize = nysize & " GB" end select
15. februar 2004 - 15:26
#25
Smukt!! Det spiller 100 %!! Takker!! :D P.S. Har du noget imod at svare på et lille og hurtigt sql spørgsmål?
15. februar 2004 - 15:29
#26
Nej, hvis jeg da kan svare på det :)
15. februar 2004 - 15:32
#27
Hehe...Tak. :) Som jeg skrev tidligere skal jeg indeksere mine Cdere, hvilket vil sige at diverse filoplysninger skal ligges ned i en database. Så var det at jeg tænkte på om man kan lave flere INSERTs af gangen. F.eks. 100 INSERTs eller 1000?
15. februar 2004 - 15:32
#28
Jeg regner med at bruge MySQL.
15. februar 2004 - 15:39
#29
Ok, ja det kommer an på datbasen. Med Access kan ikke. MS-SQL kan håndtere flere SQL sætnniger i den samme SQL sætning. "INSERT INTO (xx,yy) VALUES('aa','bb');INSERT INTO (xx,yy) VALUES('aa','bb')" Mht MySQL så er jeg lidt i tvivl om man kan det. Måske kan man.
15. februar 2004 - 15:40
#30
Hmmm, så må det komme an på et forsøg. :) Tak for svaret! Nu skal du nok få dine velfortjente points! ;)
15. februar 2004 - 15:43
#31
Ok :)
Jeg så lige denne som et eks på
www.mysql.com så måske det kan bruges?:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
15. februar 2004 - 15:44
#32
Måske, jeg vil give den et forsøg når jeg når der til. :) Tak
Kurser inden for grundlæggende programmering