Avatar billede nozio Nybegynder
24. marts 2004 - 15:44 Der er 7 kommentarer

Optimering af kode

en dynamisk form - hvor antal felter styres fra et administrationsmodul.

Der kan altså være 1 eller 100 felter af type person_id_x.

Hvordan optimeres denne kode bedst:

for each variable_name in request.form
x = x +1
if inStr(request.form.key(x),"person_id") > 0 then
  counter = counter + 1
  Execute "str_" & request.form.key(x) & " = """ & request.form.item(x) & """"
  if eval("str_person_id_" & counter) = "" then
    ' en eller anden fejl - feltet er tomt
  else
    ' feltet er IKKE tomt - do your thing
  end if
next
Avatar billede nute Nybegynder
24. marts 2004 - 16:10 #1
måske du skal starte med at forklare hvad koden forventes at gøre. der mangler hvertfald en 'end if', men det er ikke helt tydelig hvor den skal stå.

jeg forstår hellere ikke pointet med at bruge 'Execute' ... hvad er det du ønsker at opnå ?

/nute
Avatar billede nozio Nybegynder
24. marts 2004 - 16:36 #2
sorry - der mangler en end if her:

  end if
end if
next

meninger er at få eller de request.form("person_id_x") der er - ud i tilsvarende variabler, som str_person_id_x - for at kunne viderebehandle dem.

Sådan at jeg ender op med f.eks.

str_person_id_1 = 101
str_person_id_2 = 200

osv.....


Den her:

if eval("str_person_id_" & counter) = "" then
    ' en eller anden fejl - feltet er tomt
  else
    ' feltet er IKKE tomt - do your thing
  end if

- er bare for eksemplets skyld.
Avatar billede nute Nybegynder
24. marts 2004 - 16:42 #3
hmm ... så er det ikke så meget jeg ville ha optimeret koden (andet end at jeg ville have brugt arrays, istedet for at oprette variabler on the fly:

for each variable_name in request.form
x = x +1
if inStr( variable_name,"person_id") > 0 then
  counter = counter + 1
  Execute "str_" & variable_name & " = """ & request.form( variable_name ) & """"
  if eval("str_person_id_" & counter) = "" then
    ' en eller anden fejl - feltet er tomt
  else
    ' feltet er IKKE tomt - do your thing
  end if
end if
next

/nute
Avatar billede nozio Nybegynder
24. marts 2004 - 16:48 #4
nute>> hvordan ville du have gjort det med arrays?

- som et 2-dimensionelt array eller?
Avatar billede nute Nybegynder
24. marts 2004 - 17:11 #5
Fx:

Dim arrVars()
counter = 1
for each variable_name in request.form
    if inStr( variable_name, "person_id") > 0 then
        Redim Preserve arrVars( 1, counter )
          arrVars( 0, counter ) = variable_name
        arrVars( 1, counter ) = Request.form( variable_name )
        counter = counter + 1
    end if
next
for i = 1 to UBound( arrVars, 2 )
    Response.Write( "Felt: <b>" & arrVars(0, i ) & "</b>, værdi: <b>" & arrVars(1, i ) & "</b><br>" )
next
Avatar billede nozio Nybegynder
24. marts 2004 - 19:13 #6
Ser for den sags skyld ok ud - men jeg har så ikke variablerne til at arbejde videre med.
Avatar billede nute Nybegynder
24. marts 2004 - 23:03 #7
det er sant nok.

Jeg har dog aldrig forstået den helt store hensigt med dynamiske variable. jeg mener at hvis man ikke ved hvad ens variable hedder "i starten" af sin kode, så kan man hellere ikke vide hvad de hedder "i midten" af sin kode. Jeg synes arrays er meget bedre at arbejde med, for man ved altid hvad man har. Jeg har hellere aldrig oplevet nogen der bruger dynamiske variable, i mit professionelle liv, og mange af mine dygtige kolleger, samt den kode jeg læser hver dag, bruger det ikke. Nu kender jeg ikke til "de gode gamle sprog", men jeg har på følelsen af at dynamiske variable er noget der hører forhistorien til ... men det er bare mit ignorante bud :-)

/nute
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