Avatar billede chrisrj Forsker
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.
Avatar billede eagleeye Praktikant
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"
Avatar billede eagleeye Praktikant
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
Avatar billede chrisrj Forsker
15. februar 2004 - 14:27 #3
Nåå ja!

Det er da klart.
Avatar billede chrisrj Forsker
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?
Avatar billede chrisrj Forsker
15. februar 2004 - 14:30 #5
Sludder!
Det skal jo være instr(nysize, ".")
Avatar billede eagleeye Praktikant
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, ",")
Avatar billede chrisrj Forsker
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
Avatar billede chrisrj Forsker
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å. :)
Avatar billede eagleeye Praktikant
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
%>
Avatar billede chrisrj Forsker
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?
Avatar billede chrisrj Forsker
15. februar 2004 - 14:55 #11
Og kan man sætte en tusind-tals seperator(her ".") ind?
Avatar billede eagleeye Praktikant
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.
Avatar billede chrisrj Forsker
15. februar 2004 - 14:58 #13
Ja, men jeg vil slet ikke have en ",00" på mine filstørrelser. :)
Avatar billede eagleeye Praktikant
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
%>
Avatar billede eagleeye Praktikant
15. februar 2004 - 15:00 #15
ok ingen ,00 men du vil godt hvade ,35  på ?
Avatar billede chrisrj Forsker
15. februar 2004 - 15:00 #16
Yes, please. :)
Avatar billede eagleeye Praktikant
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
%>
Avatar billede chrisrj Forsker
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.
Avatar billede eagleeye Praktikant
15. februar 2004 - 15:17 #19
der mangler også et b :)

nysize = FormatNubmer(arr(0),0,0,0,-1)
Avatar billede chrisrj Forsker
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
Avatar billede chrisrj Forsker
15. februar 2004 - 15:22 #21
Nu kommer den i 44:
nysize = nysize & "," & (left(arr(1), 2)) & " KB"

Det giver også mere mening. :)
Avatar billede eagleeye Praktikant
15. februar 2004 - 15:22 #22
det forstår jeg ikke der da ikke oget indexseret område??
Avatar billede chrisrj Forsker
15. februar 2004 - 15:23 #23
Jeg tror, jeg så forkert første gang.
Avatar billede eagleeye Praktikant
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
Avatar billede chrisrj Forsker
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?
Avatar billede eagleeye Praktikant
15. februar 2004 - 15:29 #26
Nej, hvis jeg da kan svare på det :)
Avatar billede chrisrj Forsker
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?
Avatar billede chrisrj Forsker
15. februar 2004 - 15:32 #28
Jeg regner med at bruge MySQL.
Avatar billede eagleeye Praktikant
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.
Avatar billede chrisrj Forsker
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! ;)
Avatar billede eagleeye Praktikant
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)
Avatar billede chrisrj Forsker
15. februar 2004 - 15:44 #32
Måske, jeg vil give den et forsøg når jeg når der til. :)

Tak
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