[ASP] Function binnen een loop(?)

Pagina: 1
Acties:

  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Ik wil een stuk tekst uit de database afkappen tot x karakters. Aan het einde van de x karakters komt dan het welbekende: Lees meer... te staan.
Met behulp van een querystring kan men dan de hele tekst lezen.

Nu heb ik daar een hele mooie function voor gevonden:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function TextPreview(strText, nChars)
    Dim nPos

        ' Uncomment next line to replace line breaks with spaces
    ' strText = Replace(strText, vbCrLf, " ")

    ' Check if it's longer than limit
        If Len(strText) > nChars And nChars > 4 Then
            ' Find the end of last whole word that we can use
            nPos = InStrRev(Left(strText, nChars - 3), " ")

            If nPos > 0 Then
            ' Take whole words only 
                    TextPreview = Left(strText, nPos) & "<a href=""show_item_details.asp""><b><i>Lees meer...</i></b></a>"
            Else
            ' No spaces were found - take what we can
                    TextPreview = Left(strText, nChars - 4) & "<a href=""show_item_details.asp""><i>Lees meer...</i></a>"
            End If
        Else
        ' Take nChars from the text
            TextPreview = Left(strText, nChars)
        End If
End Function


Nu haal ik met een loop de verschillende artikelen (tekst) uit de database.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%
      do while not rs.eof

       i = i + 1 
%>
      <td width="300" valign="top">&nbsp;<b><%=rs("T_Page_Title")%></b><br><br>
<%
strText= thestring(rs("T_Page_Content"))
Response.Write TextPreview( strText, 200 )

       If i = 2 then 
%>
     <tr>
      <td>
<%
    i = 0
   else 
  End If
 rs.MoveNext
loop
%>


NB. 'thestring' is een variabele die ik al eerder oproep om de zaak te regexen.

Nu is het probleem dat wanneer ik de function in de loop plaats hij daar een fout op geeft:

code:
1
2
3
4
5
6
7
Microsoft VBScript compilation error '800a03ea' 

Syntax error 

/dhr/schoolstuff.asp, line 42 

Function TextPreview(strText, nChars)


Kan een function niet in een loop geplaatst worden? hij moet daar namelijk staan omdat ik het ID van een artikel moet hebben voor de querystring. Als hij buiten de loop staan kan dat dus niet.

Ik heb al een aantal stukjes code gevonden die een tekst afkappen, maar die werken niet.

Hoe kan ik dit oplossen? Ik hoop dat het duidelijk is zo :)

/edit: Sorry voor de layout vergeslachtsgemeenschapping :X

[ Voor 12% gewijzigd door Manual op 12-11-2003 13:33 ]

Specs


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 12-08 16:04

Jaspertje

Max & Milo.. lief

De fout moet je niet zoeken dat het binnen een loop staat, dat werkt wel.. Als je zelf een stuk tekst schrijft en dat door de functie haalt, wat doet het dan. werkt dat wel? kijk dan eens of er geen rare dingen in je string(StrText) staan...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Queued schreef op 12 november 2003 @ 13:32:

NB. 'thestring' is een variabele die ik al eerder oproep om de zaak te regexen.
Zoals het daar staat is thestring helemaal geen variabele, maar een functie.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Jaspertje schreef op 12 november 2003 @ 13:59:
De fout moet je niet zoeken dat het binnen een loop staat, dat werkt wel.. Als je zelf een stuk tekst schrijft en dat door de functie haalt, wat doet het dan. werkt dat wel? kijk dan eens of er geen rare dingen in je string(StrText) staan...
Dat ik ga ik proberen. Ik vang in de function nu geen singlequotes etc. af.
Janoz schreef op 12 november 2003 @ 14:02:
[...]
Zoals het daar staat is thestring helemaal geen variabele, maar een functie.
Ja, je hebt idd gelijk. Het een function |:(

Specs


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Ik heb zelf een stukje tekst gescheven en die door de functie gehaald.

Op deze manier:

ASP:
1
2
strText = blablabalbblsdfdsfdsfdsfdsfaerewrbb
Response.Write TextPreview( strText, 200 )


Vervolgens krijg ik dezelfde foutmelding. Rare dingen staan er dus ook niet in.

Specs


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Op www.asp101.com staat eenzelfde functie, zoek eens op 'wordwrap'. Misschien dat je deze als voorbeeld kunt gebruiken?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 12-08 16:04

Jaspertje

Max & Milo.. lief

strText = blablabalbblsdfdsfdsfdsfdsfaerewrbb
Response.Write TextPreview( strText, 200 )

Ik hoop dat je in de echte code blablabalbblsdfdsfdsfdsfdsfaerewrbb wel tussen haakjes hebt staan :?

geeft ie dan nog een fout, zet dan 200 ook eens tussen "" en maak er in de functie een int van..

[ Voor 21% gewijzigd door Jaspertje op 12-11-2003 14:48 ]


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Mmmm, dit weet ik niet hoor. Lijkt me een probleempje op je eigen machine. Ik heb dit script:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%
Function TextPreview(strText, nChars)
    Dim nPos

        ' Uncomment next line to replace line breaks with spaces
    ' strText = Replace(strText, vbCrLf, " ")

    ' Check if it's longer than limit
        If Len(strText) > nChars And nChars > 4 Then
            ' Find the end of last whole word that we can use
            nPos = InStrRev(Left(strText, nChars - 3), " ")

            If nPos > 0 Then
            ' Take whole words only 
                    TextPreview = Left(strText, nPos) & "<a href=""show_item_details.asp""><b><i>Lees meer...</i></b></a>"
            Else
            ' No spaces were found - take what we can
                    TextPreview = Left(strText, nChars - 4) & "<a href=""show_item_details.asp""><i>Lees meer...</i></a>"
            End If
        Else
        ' Take nChars from the text
            TextPreview = Left(strText, nChars)
        End If
End Function

strText = "blablabalbblsdfdsfdsfdsfdsfaerewrbb"
Response.Write TextPreview( strText, 200 )

%>


uitgevoerd op mijn Win2K Server, en krijg netjes:

code:
1
blablabalbblsdfdsfdsfdsfdsfaerewrbb


Als uitvoer.

Welke IIS versie gebruik je?

code:
1
Request.ServerVariables("SERVER_SOFTWARE")

[ Voor 27% gewijzigd door zneek op 12-11-2003 19:21 ]


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Jaspertje schreef op 12 november 2003 @ 14:47:
strText = blablabalbblsdfdsfdsfdsfdsfaerewrbb
Response.Write TextPreview( strText, 200 )

Ik hoop dat je in de echte code blablabalbblsdfdsfdsfdsfdsfaerewrbb wel tussen haakjes hebt staan :?

geeft ie dan nog een fout, zet dan 200 ook eens tussen "" en maak er in de functie een int van..
Eehm nee :X. Gedaan en het werkt nog niet. Ik ga zo je tweede tip uitproberen.
zneek schreef op 12 november 2003 @ 19:16:
Welke IIS versie gebruik je?

code:
1
Request.ServerVariables("SERVER_SOFTWARE")
Ik draai het ook op een w2k server (hosting provider). Ik ga het zo ook even proberen op mijn eigen PC te proberen.

Specs


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Queued schreef op 12 november 2003 @ 13:32:
<knip>

ASP:
1
2
3
4
<knip>
strText= thestring(rs("T_Page_Content"))
Response.Write TextPreview( strText, 200 )
<knip>


NB. 'thestring' is een variabele die ik al eerder oproep om de zaak te regexen.
<knip>
thestring is een var? En die gebruik je zo?
ASP:
1
strText= thestring(rs("T_Page_Content"))


Probeer dit eens:
ASP:
1
2
strText= rs("T_Page_Content")
Response.Write TextPreview( strText, 200 )
Queued schreef op 12 november 2003 @ 14:37:
ASP:
1
2
strText = blablabalbblsdfdsfdsfdsfdsfaerewrbb
Response.Write TextPreview( strText, 200 )

Vervolgens krijg ik dezelfde foutmelding. Rare dingen staan er dus ook niet in.
Duh...Probeer dit dan eens:
offtopic:
Jaspertje was me voor

ASP:
1
2
strText = "blablabalbblsdfdsfdsfdsfdsfaerewrbb"
Response.Write TextPreview( strText, 200 )

[ Voor 8% gewijzigd door RobIII op 12-11-2003 19:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
RobIII schreef op 12 november 2003 @ 19:36:
[...]
thestring is een var? En die gebruik je zo?
ASP:
1
strText= thestring(rs("T_Page_Content"))
Nee, 'thestring' is een function die ik eerder oproep.
Probeer dit eens:
ASP:
1
2
strText= rs("T_Page_Content")
Response.Write TextPreview( strText, 200 )
Dat werkt ook niet.
[...]
Duh...Probeer dit dan eens:
offtopic:
Jaspertje was me voor

ASP:
1
2
strText = "blablabalbblsdfdsfdsfdsfdsfaerewrbb"
Response.Write TextPreview( strText, 200 )
Dat had ik idd al geprobeerd.

Hij loopt continu 'vast' op het begin van die function.

Specs


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 12-08 16:04

Jaspertje

Max & Milo.. lief

Ik heb je funtie zelf eens geprobeerd.. je kan m vinden op http://www.jasperheus.nl/test.asp
Ik weet niet of dit je bedoeling is, maar het werkt wel??!!

offtopic:
of heet dat spam modjes?

[ Voor 13% gewijzigd door Jaspertje op 12-11-2003 20:36 ]


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Jaspertje schreef op 12 november 2003 @ 20:34:
Ik heb je funtie zelf eens geprobeerd.. je kan m vinden op http://www.jasperheus.nl/test.asp
Ik weet niet of dit je bedoeling is, maar het werkt wel??!!

offtopic:
of heet dat spam modjes?
Ik snap er niets van! twee mensen die het proberen waar het gewoon werkt en bij mij niet!

Ik heb nu IIS 5.0 geinstalleerd op mijn eigen PC met w2k (met sp4) en het werkt ook niet. Dan kan het toch niet aan de code liggen?

@Jasper, kan je me het bestand misschien posten/mailen? Ik wil overigens ook wel mijn eigen code posten mocht dat helpen... Die manier is idd de bedoeling

[ Voor 3% gewijzigd door Manual op 12-11-2003 23:49 ]

Specs


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
copy paste mijn exacte code van hierboven eens dan. Het code sniplet daar was de hele inhoud van mijn test.asp. Als dat niet werkt moet je toch eens aan jezelf gaan twijfelen :)

  • Kama
  • Registratie: Mei 2002
  • Laatst online: 10:29

Kama

Aritifical Intelligenticus

Ik krijg zelf de indruk dat IIS meer problemen heeft met de declaratie van die functie dan het gebruik ervan. Of er gebeurt iets raars vlak voor dat je die functiedeclaratie start

Zijn er met het copy-en/pasten van het voorbeeld soms rare tekens in de sourcecode gekomen?

Maw: gooi je code es weg, copy 'em van dit board en paste het opnieuw in je code.

edit:
Damn... net te laat :-)

[ Voor 7% gewijzigd door Kama op 12-11-2003 23:57 ]

Niels


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Kama schreef op 12 november 2003 @ 23:56:

edit:
Damn... net te laat :-)
Net? een dikke 5 minuten, en dat is hier een eeuwigheid. Kun je minstens 5 servers laten crashen in 5 minuten :)

  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
zneek schreef op 12 november 2003 @ 23:51:
copy paste mijn exacte code van hierboven eens dan. Het code sniplet daar was de hele inhoud van mijn test.asp.
Gedaan en ik krijg dezelfde foutmelding :'(
Als dat niet werkt moet je toch eens aan jezelf gaan twijfelen :)
Dat doe ik inderdaad ;(

Vaak helpt het bij mij als ik even wat anders ga doen en de computer achter me laat en er niet aan ga denken.
Ik heb boodschappen gedaan, gekookt, gegeten, Walker Texas Ranger gegeken en ik snap het nog niet.... :X

Specs


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Misschien dan toch tijd om stap voor de stap de boel op te gaan bouwen?

Probeer dit eens:
code:
1
2
3
4
5
Function testMe(var1, var2)
  testMe = Left(var1,var2)
End Function

Response.write testMe("123456789",4)

  • purge
  • Registratie: November 2000
  • Niet online
De functie zelf, zoals hij hierboven een aantal maal is gepost, werkt wel bij de mede-tweakers. Zelf denk ik dat het aan de code voor de functie ligt.
bijv.
ASP:
1
2
3
4
5
6
7
Function blaat(a)
  ...
  Function TextPreview(strText, nChars)
   ...
  End Function
 ...
End Function

zal _niet_ gaan werken, geeft dezelfde (algemene) foutmelding die je beschrijft.

Kan je kijken of je in de regels voor de functie iets kan vinden misschien kan je iets meer code posten.

edit:
typo

[ Voor 4% gewijzigd door purge op 13-11-2003 00:27 ]


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
zneek schreef op 13 november 2003 @ 00:01:
Misschien dan toch tijd om stap voor de stap de boel op te gaan bouwen?

Probeer dit eens:
code:
1
2
3
4
5
Function testMe(var1, var2)
  testMe = Left(var1,var2)
End Function

Response.write testMe("123456789",4)
Dat werkt!
Alleen buiten de loop. Dit geldt ook voor de function die ik had, heb ik net geprobeerd. Als ik de code die jij post binnen die loop zet loopt hij ook vast op de function :?

De function die ik heb moet binnen de loop om het ID van het artikel te verkrijgen zodat men d.m.v. 'lees meer' door kan klikken naar het volledige artikel.

Toch maar even de hele code. Bijvoorbaat excuses voor de layout vern##king:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<!--#INCLUDE FILE="inc_header.asp"-->

<!-- ################# Begin left Colom ################# -->

<%
PageId = request.querystring("PageId")

Set rs = Server.CreateObject("ADODB.Recordset")
strSql = "SELECT tbl_pageitems.T_Page_Title, tbl_pageitems.T_Page_Content, tbl_pageitems.T_Page_Date, tbl_pageitems.T_Page_Time, tbl_pageitems.T_Page_Lock, tbl_catitems.T_Catname, tbl_pageitems.T_Page_Cat_id, tbl_catitems.Id, tbl_pageitems.Id FROM tbl_catitems INNER JOIN tbl_pageitems ON tbl_catitems.Id = tbl_pageitems.T_Page_Cat_id  WHERE tbl_pageitems.T_Page_Cat_id = " & PageId
rs.Open strSql, my_Conn
%>
   <table width="550" border="0" cellspacing="5" align="right">
    <tr>
     <td colspan="3">&nbsp;</td>
    </tr>
    <tr>
     <td colspan="3"><hr color="#FF9900"></td>
   </tr>
    <tr>
     <td>
<%
      do while not rs.eof

       i = i + 1 
%>
      <td width="300" valign="top">[img]"images\point.gif"[/img]&nbsp;
<%
memberid = Request.Cookies("Member")("ID")

If memberid = "blaat" Then
%>
<a href="edit_item.asp?ItemId=<%=rs("tbl_pageitems.Id")%>&PageId=<%=PageId%>">[img]"images/icon_pencil.gif"[/img]</a>
<%
end if
%>&nbsp;
<b><%=rs("T_Page_Title")%></b><br><br>
<%
Function TextPreview(strText, nChars)
    Dim nPos

    ' Uncomment next line to replace line breaks with spaces
    ' strText = Replace(strText, vbCrLf, " ")

    ' Check if it's longer than limit
        If Len(strText) > nChars And nChars > 4 Then
            ' Find the end of last whole word that we can use
            nPos = InStrRev(Left(strText, nChars - 3), " ")

            If nPos > 0 Then
            ' Take whole words only 
                    TextPreview = Left(strText, nPos) & "<a href=""show_item_details.asp""><b><i>Lees meer...</i></b></a>"
            Else
            ' No spaces were found - take what we can
                    TextPreview = Left(strText, nChars - 4) & "<a href=""show_item_details.asp""><i>Lees meer...</i></a>"
            End If
        Else
        ' Take nChars from the text
            TextPreview = Left(strText, nChars)
        End If
End Function

strText = rs("T_Page_Content")
'strText = "blablabalbblsdfdsfdsfdsfdsfaerewrbb"
Response.Write TextPreview( strText, 200 )

       If i = 2 then 
%>
     <tr>
      <td>
<%
    i = 0
   else 
  End If
 rs.MoveNext
loop
%>
   </td>
  </tr>
</table>

[ Voor 16% gewijzigd door Manual op 13-11-2003 00:26 ]

Specs


  • purge
  • Registratie: November 2000
  • Niet online
Het id en het stukje tekst kan je ook meegeven aan de functie
bijv.
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Function TextPreview(strText, nChars, strMeer)
    Dim nPos

    ' Uncomment next line to replace line breaks with spaces
    ' strText = Replace(strText, vbCrLf, " ")

    ' Check if it's longer than limit
        If Len(strText) > nChars And nChars > 4 Then
            ' Find the end of last whole word that we can use
            nPos = InStrRev(Left(strText, nChars - 3), " ")

            If nPos > 0 Then
            ' Take whole words only 
                    TextPreview = Left(strText, nPos) & strMeer
            Else
            ' No spaces were found - take what we can
                    TextPreview = Left(strText, nChars - 4) & strMeer
            End If
        Else
        ' Take nChars from the text
            TextPreview = Left(strText, nChars)
        End If
End Function

Do While Not rs.eof

  strText = "blablabalbblsdfdsfdsfdsfdsfaerewrbb"
  meer  = "<a href=""show_item_details.asp""><i>Lees meer...</i></a>"

  Response.Write TextPreview( strText, 200, meer )

Loop

Verwijderd

Je moet de functie buiten de loop plaatsen!

je krijgt nu waarschijnlijk een foutmelding omdat elke keer de functie opnieuw gedeclareert wordt, maar dat kan niet.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Je moet de function buiten de loop declareren en binnen de loop aanroepen.


Edit: te laat, was in slaap gevallen.

[ Voor 23% gewijzigd door jelmervos op 13-11-2003 00:58 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
purge schreef op 13 november 2003 @ 00:42:
Het id en het stukje tekst kan je ook meegeven aan de functie
bijv.
ASP:
1
De winnende inzending  ;) 
Dat werkt met alles erop en eraan!

Ik had nog niet eerder zo'n situatie gehad.

_/-\o_

Specs


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 12-08 16:04

Jaspertje

Max & Milo.. lief

Queued schreef op 13 november 2003 @ 09:43:
[...]


Dat werkt met alles erop en eraan!

Ik had nog niet eerder zo'n situatie gehad.

_/-\o_
Geef dan alleen het ID mee de functie in en niet de hele <a href=...

Op die manier hou je je code korter en overzichtelijker, bovendien kan je op deze manier nog meer binnen je functie doen (als dat nodig zou zijn)

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
omfg, heb ik daar overheen gelezen? 8)7 Functie buiten de loop declareren, binnen de loop aanroepen. Toet toet boing boing 8)7

Succes der verder mee :)

  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Jaspertje schreef op 13 november 2003 @ 09:58:
[...]
Geef dan alleen het ID mee de functie in en niet de hele <a href=...

Op die manier hou je je code korter en overzichtelijker, bovendien kan je op deze manier nog meer binnen je functie doen (als dat nodig zou zijn)
Ik begrijp je niet helemaal. Waar zou wat moeten veranderen? Ik gebruik nu het voorbeeld van http://gathering.tweakers.net/forum/find/poster/16609
zneek schreef op 13 november 2003 @ 13:13:
omfg, heb ik daar overheen gelezen? 8)7 Functie buiten de loop declareren, binnen de loop aanroepen. Toet toet boing boing 8)7

Succes der verder mee :)
Gaat zeker lukken :Y)

Specs

Pagina: 1