Avatar billede marrix Juniormester
07. marts 2004 - 11:30 Der er 16 kommentarer og
1 løsning

Lav variabler i en løkke

Sikkert temmelig simpelt - men jeg kan bare ikke få det til at virke: Jeg skal have lavet et x antal variabler i en løkke, som efterfølgende skal bruges uden for løkken. Princippet er følgende:

for i = 1 to 5
var(i) = "Dette er hej nummer" & i
response.write var(i) & "<br>"
end

...hvor var(i) gerne skulle være variabler med navnene var1, var2, var3 .... osv. Og som jeg kan kalde igen senere i samme dokument. Men var(i) accepteres ikke - har også prøvet var+(i), "var"(i) osv. Men ingen af dem kan jeg få til at fungere. Hvordan gør jeg?
Avatar billede nute Nybegynder
07. marts 2004 - 11:39 #1
brug arrays:

for i = 1 To 5
    ReDim Preserve arr( i )
    arr( i ) = "Dette er nummer " & i
    Response.Write( arr( i ) & "<br>" )
next

/nute
Avatar billede marrix Juniormester
07. marts 2004 - 12:09 #2
...ja det ser vel ud til at virke. Men mon det virker til mit egentlige formål, for det jeg viste var kun "princippet" i det jeg i virkeligheden skal bruge det til. Her er det virkelige formål:

for i = 1 to 9
varTxtSti = "tekster\brs\brs" & i & ".txt"
filespec(i) = (server.mappath(varTxtSti))
Set f(i) = fso.OpenTextFile((filespec(i)),1)
next

...jeg skal bruge de "dynamiske" variabler for senere at kunne kalde et antal forskellige tekstfiler - f1, f2, f3 osv - en ad gangen. Jeg kunne selvfølgelig skrive scriptet det antal gange, jeg skal bruge det, og selv ændre variablen fra gang til gang - men nu er jeg blevet stædig. Det må kunne lade sig gøre i en løkke....(?)

Marianne
Avatar billede nute Nybegynder
07. marts 2004 - 12:15 #3
selvfølgelig kan det lade sig gøre...

for i = 1 to 9
    varTxtSti = "tekster\brs\brs" & i & ".txt"
    filespec  = server.mappath(varTxtSti)
    ReDim f( i )
    Set myTextStream = fso.OpenTextFile( filespec, 1 )
    f( i ) = myTextStream
next

/nute
Avatar billede marrix Juniormester
07. marts 2004 - 12:36 #4
..nå ja - filespec behøver jo egentlig ikke være "dynamisk". Du har puttet en ekstra linje på - det med "Set myText.....". Er det fordi det ikke kan lade sig gøre at bruge en "dynamisk" variabel (eller hvad jeg nu skal kalde det) - f(i) - samtidig med "Set", eller.....?!?

Det ser ellers lovende ud - prøver lige om det virker til formålet...

Marianne
Avatar billede marrix Juniormester
07. marts 2004 - 12:40 #5
...hmmmm jeg har nu lige testet det. Har kopieret og indsat dit forslag direkte i mit dokument, og jeg får nogenlunde samme fejlmeddelelse, som ved mine egne forsøg:

Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01B6)
Objektet understøtter ikke denne egenskab eller metode: 'f'
/brsnj/www/index.asp, line 16

Line 16 er:    f(i) = myTextStream

???? Nogle forslag til hvad der er galt, og hvad jeg kan gøre...?
Avatar billede nute Nybegynder
07. marts 2004 - 12:42 #6
jo, du kan sagtens fjerne den extra linje (Set myTextStream ... ) og skrive 'Set f( i ) = fso.Open ...'. Jeg skrev den blot for at vise eksplicit hvad der sker :)

/nute
Avatar billede nute Nybegynder
07. marts 2004 - 12:43 #7
hvad med

Set f(i) = myTextStream

??
Avatar billede marrix Juniormester
07. marts 2004 - 12:53 #8
Nu får jeg følgende besked:

Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01A8)
Et objekt er obligatorisk: 'f1'
/brsnj/www/index.asp, line 60

Line 60 er der hvor jeg henter teksterne frem:

Line 60: Do While not f1.AtEndOfStream
        Response.write f1.ReadLine & "<br>"
        Loop

....hmmmmm tænker selv at det måske skyldes at denne løkke egentlig fordrer at jeg stadig har "kontakt" til tekstdokumentet....måske. Måske skulle jeg lave denne løkke inde i den forrige løkke, og samle al teksten med noget i retning af:

Redim TxtSamlet(i)              'hvis din måde at gøre det på holder stik...
Do While not f1.AtEndOfStream
    Set TxtSamlet(i) = TxtSamlet(i) & f1.ReadLine & "<br>"
Loop

...hvad siger du? ....???
Avatar billede nute Nybegynder
07. marts 2004 - 12:55 #9
hmm ... det er nærmest umuligt at sige. det jeg har postet fungere, men jeg ved jo ikke i hvilken sammenhæng du bruger det. lad mig se hele koden du bruger for at løbe dine filer igennem ...
Avatar billede marrix Juniormester
07. marts 2004 - 13:36 #10
...okay, her er hele dynen ganske ukritisk, som den p.t. ser ud:

<html>
<title>Læse fra tekstfiler</title>
<head>
<link rel="stylesheet" type="text/css" href="brsnj-stylesheet.css">

<%

Set fso = CreateObject("Scripting.FileSystemObject")


for i = 1 to 9
    varTxtSti = "tekster\brs\brs" & i & ".txt"
    filespec  = server.mappath(varTxtSti)
    ReDim f(i)
    Set myTextStream = fso.OpenTextFile( filespec, 1 )
    Set f(i) = myTextStream
next

%>

</head>

<body>
<a name="top">&nbsp;</a>
<ul class="menu">
<li><a href="om-brsnj.asp">Om Nordjylland</a></li>
<li><a href="forste-dag.asp">Dagen</a></li>
<li><a href="hverdagen.asp">Hverdagen</a></li>
<li><a href="uddannelser.asp">Uddannelser og kompetencer</a></li>
<li><a href="okonomi.asp">Løn og økonomi</a></li>
<li><a href="vejledning.asp">Råd og vejledning</a></li>
<li><a href="udvalg.asp">Udvalg</a></li>
<li><a href="fritiden.asp">Fritiden</a></li>
<li><a href="kontakt.asp">Kontakt</a></li>
<li><a href="links.asp">Links</a></li>
</ul>

<div id="indhold">
<br>

  <div id="undermenu"> <a href="#brsnj">[Om BRSNJ]</a>&nbsp;&nbsp;<a href="#placering">[Placering
    mv]</a>&nbsp;&nbsp;<a href="#vagtstyrken">[Vagtstyrken]</a>&nbsp;&nbsp;<a href="#internationale">[Internationale
    indsatser]</a>&nbsp;&nbsp;<a href="#logo">[Afdelingsm&aelig;rke/logo]</a>&nbsp;&nbsp;<a href="#organisering">[Organisering]</a>&nbsp;&nbsp;<a href="#historie">[Historie]</a>
  </div>
 
  <br>
  <br>
  <br>
  <br>


  <div id="overskrifter"><br>
    <a name="brsnj">Om Nordjylland</a>
    </div>
  <br>
 
 
  <%
Do While not f1.AtEndOfStream
  Response.write f1.ReadLine & "<br>"
Loop
%>
<br>
  <a href="#top">[gå til top - klik her...]</a>
  <br>

</div>

<div id="foto-oppe"><img src="images/brsnj-tegning.jpg" width="300" height="182"></div>

<%
'for i=1 to 9
f1.Close
'next
%>
</p>
</body>
</html>
Avatar billede nute Nybegynder
07. marts 2004 - 14:01 #11
ahh... for det første, så har du glemt ordet 'Preserve' efter ReDim statementen. og for det andre, så ville jeg nok have gjort det på en anden måde:

Den første loop ville jeg have lavet sådan:

for i = 1 to 9
    varTxtSti = "tekster\brs\brs" & i & ".txt"
    ReDim Preserve f(i)
    f(i-1)  = server.mappath(varTxtSti)
next

og så ville jeg skrevet ud filen sådan:

Set objTextStream = fso.OpenTextFile( f(1), 1 )
Do While not objTextStream.AtEndOfStream
  Response.write objTextStream.ReadLine & "<br>"
Loop
objTextStream.Close

/nute
Avatar billede marrix Juniormester
07. marts 2004 - 14:12 #12
...okay. Den skal jeg lige tygge lidt på (prøve at forstå!) - det med f(i-1) forstår jeg ikke lige umiddelbart, men det gør jeg nok, når jeg får sat mig lidt mere ind i det.

Preserve....det er vist noget med at det forgående bevares og noget mere tilføjes...??? Eller hvad?

Prøver lige at forstå og tester....vender tilbage.

Venligst
Marianne
Avatar billede nute Nybegynder
07. marts 2004 - 14:45 #13
f(i-1) bruges fordi en array i VB (og de fleste andre sprog) er 0-baseret. Dette betyder at det første element i en array, har "id" (index) 0. når du laver din loop, så starter du på 1, og for at arrayet skal have noget indhold "helt i starten" ( ed det første index), så sætter man i-1. I en loop der starter på 1, så vil den første f(i-1) jo være: f(1-1) som igen er det samme som f(0) :-)

Preserve bruges når du gerne vil ændre størrelsen på din array, men beholde indholdet i den. Det der sker når du ReDim'er en array, så allokeres der en ny plads i minde til den nye array, og hvis du vil beholde indholdet i den array du ReDim'er, så er du nødt til at bruge 'Preserve'

:o]
Avatar billede marrix Juniormester
07. marts 2004 - 16:30 #14
Du er bare en sveske.....tak for hjælpen. Jeg har ikke testet det færdigt endnu, men jeg er ret sikker på at det virker ;-). Måske vender jeg tilbage med et par spørgsmål - ok?

Skal rejse her til aften...så vender måske tilbage i morgen.

Tak for hjælpen.... :-)
Avatar billede marrix Juniormester
07. marts 2004 - 16:31 #15
...men hov, du har jo slet ikke sendt mig et "svar" - kan du ikke gøre det så jeg kan give dig points?

Marianne
Avatar billede nute Nybegynder
07. marts 2004 - 16:35 #16
jow ... et svar skal du få. håber det er hvad du er på jagt efter :o] hvis du har flere spm, så er det bare at komme med dem ... jeg svarer gerne.

God tur...

/nute
Avatar billede marrix Juniormester
07. marts 2004 - 16:43 #17
...tusind tak...lyder skønt...

og igen tak for hjælpen.

Marianne
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