Avatar billede Slettet bruger
07. december 2003 - 18:28 Der er 78 kommentarer og
1 løsning

Problem med funktion, nmh?

Hejsa

Dette spørgsmål er henvendt til nmh, men hvis I andre har en idé, må I gerne være med :)

Funktionerne kan ses i http://www.eksperten.dk/spm/405774

Scriptet virker fint når det køres som det er vist i linket ovenfor, men jeg har problemer med at få det til at køre i den sammenhæng hvor det skal indgå.

Jeg har en side, hvor funktionen linktekst skal køres på rs("indhold") hvilket jeg gør med <%=LinkTekst(rs("indhold"))%>, men det resulterer bare i at der slet ikke kommer nogen tekst frem.

Jeg ved at de der findes ord i ord tabellen, og at rs("indhold") ikke er tomt..

Noget bud?
Avatar billede nmh Nybegynder
07. december 2003 - 19:44 #1
Start med at se, hvad der sker, hvis du blot udskriver teksten i din database.
Har du husket at sortere dit array med ordre
sort arrOrd
arrOrd var din liste med ord og og nogle referencenumre.
Avatar billede Slettet bruger
07. december 2003 - 19:47 #2
hvis jeg blot udskriver sker der.... surprise ;) en udskrift af indholdet i rs("indhold")
Avatar billede Slettet bruger
07. december 2003 - 19:48 #3
jeg har inkluderet en fil med følgende indhold

<%
'tekst="En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge"
SQL = "SELECT id, ord FROM ord"
Set rs = Conn.Execute(SQL)
if not rs.eof then
  arrOrd = rs.getrows()
end if
rs.close
set rs = nothing

N=Ubound(arrOrd,2)

sub Sort(A)
'A skal være en tabel af form A(1,n)
'tabellen A sorteres efter 2.plads. CombSort
'alle bogstaver laves om til små bogstaver.
  dim n, gap,OK,i,j,tmp
  n=Ubound(A,2)
  for i=0 to n
    arrOrd(1,i)=Lcase(arrOrd(1,i))
  next
  gap = n
  ok = True
  While ok
    If gap < 1 Then gap = 1
    ok = (gap <> 1)
    For i = 0 To n - gap
      j = i + gap
      If A(1,i) > A(1,j) Then
        tmp = A(0,j): A(0,j) = A(0,i): A(0,i) = tmp
        tmp = A(1,j): A(1,j) = A(1,i): A(1,i) = tmp 
        ok=true
      End If
    Next
    gap = Int(gap / 1.33) 'Tallet 1.33 er bedst
  Wend
end sub

function fundet(ord,nr)
  dim i,j,k,tblOrd
  fundet=false
  i=0: j=N
  do
    k=(i+j)\2
    tblOrd=arrOrd(1,k)
    if ord=tblOrd then
      fundet=true: nr=arrOrd(0,k)
      exit function
    elseif ord>tblOrd then
      i=k+1
    else
      j=k-1
    end if
  loop until i>j
end function


function Link(ord)
  dim i, nr
  if fundet(Lcase(ord),nr) then
    Link="<a href=""ord.asp?id=" & nr & """>" & ord & "</a>"
    exit function
  end if
  Link=ord
end function

function LinkTekst(tekst)
  dim p, ord, tmp, ch,L
  const Bgst="abcdefghijklmnopqrstuvvwyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"
  p=1: L=len(tekst)
  while p<=L
    ch=mid(tekst,p,1):p=p+1
    while Instr(Bgst,ch)>0 and p<=L+1
      ord=ord & ch
      ch=mid(tekst,p,1)
      p=p+1
    wend
    if ord<>"" then
      tmp=tmp & Link(ord) & ch
      ord=""
    else
      tmp=tmp & ch
    end if
  wend
  LinkTekst=tmp
end function

sort arrOrd
'Her er en testudskrift:
'response.write LinkTekst(tekst)
%>

og herefter kalder jeg så fra en anden fil med <%=LinkTekst(rs("indhold"))%>
Avatar billede nmh Nybegynder
07. december 2003 - 19:54 #4
Prøv at udskrive nogle af elementerne i dit array arrord.
Skriv
response.write(arrord(0,0))
response.write(arrord(1,0))
response.write(arrord(0,1))
response.write(arrord(1,1))
response.write(arrord(0,2))
response.write(arrord(1,2))
Avatar billede nmh Nybegynder
07. december 2003 - 19:57 #5
Jeg vil prøve at svare så hurtigt jeg kan, men jeg har en del at se til her i aften, så jeg kan ikke love, det bliver her søndag aften.
Avatar billede Slettet bruger
07. december 2003 - 19:57 #6
Det giver 2cykel1bil3hus
Avatar billede nmh Nybegynder
07. december 2003 - 20:12 #7
Prøv at give ordren
sort arrord
og udskriv så igen
arrord(0,0),arrord(1,0),...

Prøv derefter at skrive
response.write LinkTekst(tekst)
Avatar billede Slettet bruger
07. december 2003 - 20:48 #8
gør ingen forskel :(

        <%sort arrord%>
        <%=LinkTekst(rs("indhold"))%>
Avatar billede nmh Nybegynder
07. december 2003 - 21:00 #9
Hvad skete der, da du skrev
response.write LinkTekst(tekst)
?

Det har jo tidligere virket.
Avatar billede Slettet bruger
07. december 2003 - 21:23 #10
response.write LinkTekst(tekst) virker fint nok i det isolerede eksempel, men det går galt når jeg vil kalde LinkTekst funktionen fra et andet script...
Avatar billede nmh Nybegynder
07. december 2003 - 22:05 #11
Men hvad sker der da i det andet script?
Hvad mener du med, at du vil kalde den FRA det andet script?
Har du ikke det hele samlet et sted eller hvad?
Avatar billede Slettet bruger
07. december 2003 - 22:20 #12
Øverst i det andet script (default.asp?vis=se) har jeg en <!--#include file="leksikonfunktion.asp"--> som inkluderer følgende:

<%
'tekst="En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge"
SQL = "SELECT id, ord FROM ord"
Set rs = Conn.Execute(SQL)
if not rs.eof then
  arrOrd = rs.getrows()
end if
rs.close
set rs = nothing

N=Ubound(arrOrd,2)

sub Sort(A)
'A skal være en tabel af form A(1,n)
'tabellen A sorteres efter 2.plads. CombSort
'alle bogstaver laves om til små bogstaver.
  dim n, gap,OK,i,j,tmp
  n=Ubound(A,2)
  for i=0 to n
    arrOrd(1,i)=Lcase(arrOrd(1,i))
  next
  gap = n
  ok = True
  While ok
    If gap < 1 Then gap = 1
    ok = (gap <> 1)
    For i = 0 To n - gap
      j = i + gap
      If A(1,i) > A(1,j) Then
        tmp = A(0,j): A(0,j) = A(0,i): A(0,i) = tmp
        tmp = A(1,j): A(1,j) = A(1,i): A(1,i) = tmp 
        ok=true
      End If
    Next
    gap = Int(gap / 1.33) 'Tallet 1.33 er bedst
  Wend
end sub

function fundet(ord,nr)
  dim i,j,k,tblOrd
  fundet=false
  i=0: j=N
  do
    k=(i+j)\2
    tblOrd=arrOrd(1,k)
    if ord=tblOrd then
      fundet=true: nr=arrOrd(0,k)
      exit function
    elseif ord>tblOrd then
      i=k+1
    else
      j=k-1
    end if
  loop until i>j
end function


function Link(ord)
  dim i, nr
  if fundet(Lcase(ord),nr) then
    Link="<a href=""ord.asp?id=" & nr & """>" & ord & "</a>"
    exit function
  end if
  Link=ord
end function

function LinkTekst(tekst)
  dim p, ord, tmp, ch,L
  const Bgst="abcdefghijklmnopqrstuvvwyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"
  p=1: L=len(tekst)
  while p<=L
    ch=mid(tekst,p,1):p=p+1
    while Instr(Bgst,ch)>0 and p<=L+1
      ord=ord & ch
      ch=mid(tekst,p,1)
      p=p+1
    wend
    if ord<>"" then
      tmp=tmp & Link(ord) & ch
      ord=""
    else
      tmp=tmp & ch
    end if
  wend
  LinkTekst=tmp
end function

sort arrOrd
'Her er en testudskrift:
'response.write LinkTekst(tekst)
%>


dernæst har jeg en løkke der kører og skriver indholdet af et rs("indhold") ud.  Og det er indholdet af dette rs, jeg vil ha' genereret links i. Og det formodede jeg at jeg kunne gøre ved at skrive <%= LinkTekst(rs("indhold"))%> i stedet for <%= rs("indhold")%>
Avatar billede nmh Nybegynder
07. december 2003 - 22:38 #13
Prøv i det nye script at erstatte
<%=LinkTest(rs("indhold"))%> med
<%=LinkTest(tekst))%>

Virker alt ellers  eller kommer der en fejlmeddelelse?

Prøv også at tilføje
<%="Nu kommer der da i hvert fald noget her"%>
Hvis dette ikke bliver udskrevet, er der noget helt andet galt.
Avatar billede Slettet bruger
07. december 2003 - 22:42 #14
LinkTekst(tekst) giver ingenting, LinkTekst(rs("indhold")) heller ej, hvorimod rs("indhold") i ren form, udskriver indholdet som den skal
Avatar billede nmh Nybegynder
07. december 2003 - 22:49 #15
Når Linktekst(tekst) ikke giver noget nu, så må det jo være fordi der er kludder med din include-ting.
Lad være med at gøre det med include.
Sæt det hele ind i en fil i første omgang.

Prøv at skrive <%=LinkTekst(tekst) & "Her er noget###"%>
Så får du at se, om LinkTest(tekst) omfattes som en tom tekststreng.
Avatar billede Slettet bruger
07. december 2003 - 22:56 #16
tekst variablen er jo slet ikke sat til noget i include filen
Avatar billede Slettet bruger
07. december 2003 - 22:57 #17
jeg har udkommenteret den, for funktionen skal jo kunne tage den streng den skal manipulere, som parameter.
Avatar billede Slettet bruger
07. december 2003 - 23:02 #18
der kommer ingen fejlmelding i øvrigt...
Avatar billede Slettet bruger
07. december 2003 - 23:04 #19
Jeg prøvede lige at smide en Cstr() rundt om så der nu står        
<%sort arrOrd%>
<%=LinkTekst(Cstr(rs("indhold")))%>

det bevirkede at teksten kom igen, men stadig ikke m. links
Avatar billede nmh Nybegynder
08. december 2003 - 09:11 #20
Prøv med følgende:

tekst="En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge"
response.write(LinkTekst(tekst) & "<br>")
tekst=Cstr(rs("indhold"))
response.write(LinkTekst(tekst) & "<br>")

Fortæl, hvad der sker.
Avatar billede nmh Nybegynder
08. december 2003 - 09:25 #21
I øvrigt:

Du bør altid starte en asp-side med
Option Explicit

Det tvinger dig til at erklære alle variable i en dim-sætning.
Det kunne være, at du nogle steder bruger nogle globale variable med samme navn, som dem jeg bruger. Det kan måske give nogel problemer.
Sådanne fejl opdages, når man tvinges til at erklære sine variable. I øvrigt vil asp-programmer køre en lille smule bedre, når man bruger Option Ecplicit.
Få derfor først dine egne ting til at køre, efter du har tilføjet Option Explicit.
Derefter sætter du mit program ind.

I starten af det jeg har lavet skal du skrive

dim arrOrd, N, tekst, i, txt

Der må kun være Option Explicit et sted, og det skal være øverst i dit eget.
Avatar billede Slettet bruger
08. december 2003 - 15:17 #22
tekst="En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge"
response.write(LinkTekst(tekst) & "<br>")
tekst=Cstr(rs("indhold"))
response.write(LinkTekst(tekst) & "<br>")

medvirker at udskriften

En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge

hvor de ord der skal være links, bliver til links, men den tekst der er i rs("indhold") er totalt upåvirket...

er godt klar over det med Option Explicit :)
Avatar billede nmh Nybegynder
08. december 2003 - 18:26 #23
ja, men det virker jo som ren mystik.
Og du har skrevet det præcist som jeg bad om:
tekst="En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge"
response.write(LinkTekst(tekst) & "<br>")
tekst=Cstr(rs("indhold"))
response.write(LinkTekst(tekst) & "<br>")

det hele ind i dit asp-program.
Hvad indeholder rs("indhold")?
Kunne det tænkes, at der er specielle tegn med i rs("indhold")?
Prøv at få skrive:
tekst=Cstr(rs("indhold"))
response.write(tekst & "<br>" & len(tekst))

Skriv en eksakt kopi af, hvad der kommer her.
Avatar billede Slettet bruger
09. december 2003 - 13:18 #24
tekst=Cstr(rs("indhold"))
response.write(tekst & "<br>" & len(tekst))

giver

En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge
112
Avatar billede nmh Nybegynder
09. december 2003 - 13:33 #25
Ja, den tekst, du her har skrevet ud her, er helt magen til den oprindelige.
Hvis du nu i samme program skriver:

tekst="En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge"
response.write(LinkTekst(tekst) & "<br>")

tekst=Cstr(rs("indhold"))
response.write(LinkTekst(tekst) & "<br>")

tekst="En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge"
response.write(LinkTekst(tekst) & "<br>")

hvad sker der så?
Avatar billede Slettet bruger
09. december 2003 - 13:46 #26
nu kan jeg gå det til at virke, med
response.write(LinkTekst(Cstr(rs("indhold"))))

men der er stadig noget galt, nogle ord bliver taget med, mens andre ikke gør... Kunne tyde på en bug i selve funktionen?
Avatar billede nmh Nybegynder
09. december 2003 - 13:47 #27
Jeg kigger mere på det.
Avatar billede Slettet bruger
09. december 2003 - 13:49 #28
tak :)
Avatar billede Slettet bruger
11. december 2003 - 19:22 #29
hvornår? :)
Avatar billede nmh Nybegynder
11. december 2003 - 19:46 #30
Jeg håber i aften eller i morgen.
Har du erklæret alle variable og brugt ordren Option Explicit?
Avatar billede nmh Nybegynder
11. december 2003 - 19:51 #31
Jeg håber du svarer på dette, inden jeg går i gang.
Avatar billede Slettet bruger
11. december 2003 - 20:45 #32
Ja
Avatar billede Slettet bruger
11. december 2003 - 20:58 #33
Jeg kan ikke rigtig se noget mønster i hvor den fejler.. Nogle ord undlader den helt at lave til links (f.eks. marx) mens andre (bil, cykel, subjekt, antagonistisk) virker fint nok.

Derudover tror jeg det er hensigtsmæssigt at eksempelvis 'dreng' bliver til link hvis der står 'drengen' :)
Avatar billede nmh Nybegynder
12. december 2003 - 13:24 #34
Jeg har fundet en fejl
const Bgst="abcdefghijklmnopqrstuvvwyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"
x mangler, derfor kommer marx ikke med.
Det skal være sådan:
const Bgst="abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"

Men er der andre ord, der giver problemer?
Hvor stor er din ordliste nu?
Avatar billede Slettet bruger
12. december 2003 - 13:29 #35
doh!

Det var vist egentlig det eneste - håber ikke du brugte alt for lang tid på at konstatere det :)

Ordlisten indeholder 8 ord, men sitet ligger stadig kun lokalt.

Ville du kunne ændre i det, således at 'dreng' bliver til link hvis der står 'drengen' ?
Avatar billede Slettet bruger
12. december 2003 - 13:33 #36
argh, det giver jo selvfølgelig et problem hvis både dreng og drengen findes. Så 'dreng' skal kun laves til link hvis 'drengen' ikke findes i arrayet/dben og hvis det modsatte er tilfældet, skal 'drengen' naturligvis laves til link.
Avatar billede nmh Nybegynder
12. december 2003 - 13:35 #37
Jeg kunne nok godt ændre så dreng kommer med, hvis der står drengen.
Men er det noget der skal gælde generelt?
seng med, hvis der står sengen etc?
Men ig skal jo ikke med fordi, der står igen.

Mon ikke, du i stedet skal have begge ord dreng og drengen med. De skal så referere til det samme nummer.
Avatar billede Slettet bruger
12. december 2003 - 13:41 #38
hmm, hvis nu der står marxistisk OG marx, skal det jo ikke nødvendigvis referere til det samme opslag.

En anden bug jeg lige fandt: hvis en post i ord tabellen består af flere ord f.eks. 'den franske revolution' bliver det ikke til et link.
Avatar billede nmh Nybegynder
12. december 2003 - 13:51 #39
marxistisk og marx:
Det er du nødt til at håndtere via din ordliste. De to ord skal begge, men så skal du give dem forskelligt nummer i ordlisten.

En sætning bliver ikke til et link, fordi du hidtil ikke har talt om andet end ord. Der skal tænkes helt nye tanker, hvis du skal håndtere den slags.

Hvordan skal man i øvrigt håndtere det, hvis du både vil have sætningen 'marxisme er forældet tankegods' , ordene marxisme og tankegods med i din ordliste?

Hvor kommer teksterne fra?
Avatar billede Slettet bruger
12. december 2003 - 14:01 #40
1) marxistisk og marx. Hvis der i rs("indhold") indgår 'marxistisk'  men 'marxistisk' ikke indgår i arrOrd MEN at 'marx' gør, så skal de 4 første chars af 'marxistisk' laves til link.

2) Jeg har svært ved at lure hvad der er mest hensigtsmæssigt mht. ord vs. sætninger. Det vil nok fortrinsvis være ord, men på den anden side, vil der ofte være brug for "sætninger" f.eks. hedder Marx jo retteligt Karl Marx...

Hvad mener du med Hvor kommer teksterne fra? :)
Avatar billede nmh Nybegynder
12. december 2003 - 14:05 #41
Tekster: Er det tekster, du henter tilfældige steder fra, eller har du selv muligheder, for at redigere i dem. En sætning kunne jo så markeres specielt.
f.eks.
Karl_Marx

I det øjeblik programmet skal til at søge på dele af ord, vil der kunne komme problemer, hvor man får markeret på forkert måde, vil jeg tro.
Avatar billede Slettet bruger
12. december 2003 - 14:09 #42
rs("indhold") eller teksterne om du vil, er løbende indlæg i en tråd (ligesom denne)
ord tabellen, skabes løbende og der tilføjes til den fra en formular, så det er vel bare at replace mellemrum med _ hvis det hjælper dig?
Avatar billede nmh Nybegynder
12. december 2003 - 14:11 #43
ja, men der skal jo kun indsættes et mærke som f.eks. _ nogle steder. Albet_Einstein, men ikke Peter Olsen.
Avatar billede Slettet bruger
12. december 2003 - 14:14 #44
Hvorfor ikke? Hvis man tilføjer Peter Olsen, må man vel have til hensigt at forklare noget om ham, på samme måde som med Albert Einstein?
Avatar billede nmh Nybegynder
12. december 2003 - 14:27 #45
Vi taler vist forbi hinanden.
Er det sådan, at teksterne skabes af personer, der så kan vælge, hvad der skal med, og hvad der ikke skal med?

Et eksempel:
Peter Olsen er ukendt, Albert_Einsteins_teorier er stadig intessante, men Karl_Marx kan vi ikke mere bruge til noget.
Den_almene_relativitetsteori bør være med i ordlisten.
Avatar billede nmh Nybegynder
12. december 2003 - 14:29 #46
ups: interessante
Avatar billede Slettet bruger
12. december 2003 - 14:32 #47
ja, noget kunne tyde på det :(

Brugerne skaber selv indlæg (poster i en svar tabel) og kan, hvis de har et godt begreb eller ord der ikke findes i forvejen, klikke på "tilføj ord", hvorved der kommer et nyt ord i tabellen ord. Brugerne skal ikke vælge om noget skal med eller ej; hvis et ord/begreb findes i ordtabellen så lav dem til links automatisk.
Spørg endelig videre hvis du ikke er med, så vil jeg prøve at forklare så godt som muligt :)
Avatar billede nmh Nybegynder
12. december 2003 - 14:42 #48
Men så er det jo blot at tilføje _ som et lovligt tegn
Det skal så ind i listen af bogstaver (den der er gemt i den variable Bgst).

Men systemet med links vil kun virke, hvis de tekster, der skal markeres på forhånd er forsysnet med de rigtige markeringer mht navne og sæninger, der skal med.

Jeg troede egentlig, at dit system skulle virke på en vilkårlig tekst.
Avatar billede Slettet bruger
12. december 2003 - 14:48 #49
systemet skal virke på en vilkårlig tekst - hvor får du det modsatte fra?

"
Men systemet med links vil kun virke, hvis de tekster, der skal markeres på forhånd er forsysnet med de rigtige markeringer mht navne og sæninger, der skal med.
"
mener du hermed at den franske revolution så skal indtastes af brugeren som den_franske_revolution i selve indlægget?

Det bliver lidt noget knald... Måske skal vi holde os til ord...
Avatar billede nmh Nybegynder
12. december 2003 - 15:03 #50
Ja, hvis du vil have sætninger og dele af ord håndteret specielt, vil det blive et tungt system, når det skal virke på vilkårlige tekster.
For øjeblikket bliver en tekst løbet igennem fra en ende af, og for hvert ord, undersøges, om det er nævnt i ordlisten.
Det går hurtigt, fordi ordlisten er sorteret.

Hvis man skulle kunne have sætninger med, skulle man løbe ord/sætningslisten igennem, og så se om et sådant ord eller sætninf fandtes i teksten.
Det ville køre tungere, og det ville være at begynde helt forfra.
Avatar billede Slettet bruger
12. december 2003 - 15:09 #51
so be it :) vi nøjes med ord, men kunne du gøre som jeg beskrev 12/12-2003 14:01:13 i pkt. 1) ?
Avatar billede nmh Nybegynder
12. december 2003 - 15:16 #52
Mener du at det specielle ord marxistisk skal behandles særligt eller mener du alle ord, hvor starten på ordet er med i ordlisten skal markeres?
Hvis skole er i ordlisten, så skal skolepige, skoledreng etc. markeres.
Hvis bil er i listen så skal bilen nok markeres, men det skal billet og billede vel ikke.
Avatar billede nmh Nybegynder
12. december 2003 - 15:18 #53
Derfor er det nok ikke en god ide. ordlisten bør indeholde præcis de relvante ord vil jeg mene. Ellers kommer der underlige ting til at ske som i mit eksempel med bil ovenfor.
Avatar billede Slettet bruger
12. december 2003 - 15:19 #54
Det er en generel funktionalitet jeg mener. Jeg ved ikke hvordan man skal lave skellet mest hensigtsmæssigt, men skoledreng skal ikke markeres, kun 'skole' således at man ikke foranlediges til at tro at der er et opslag 'skoledreng' når det i virkeligheden refererer til 'skole'
Avatar billede nmh Nybegynder
12. december 2003 - 15:25 #55
Det tror jeg du skal gennemtænke noget mere.
I første omgang mener jeg det må være lettest og sikrest, at lade ordlisten styre tingene.
Avatar billede Slettet bruger
15. december 2003 - 11:53 #56
Jeg har tænkt lidt mere over det, og selvom det kan give nogle underlige resultater nogle gange, vil jeg meget gerne have den førnævnte funktionalitet hvor marxistisk bliver lavet til link i marxistiske hvis marxistisk findes, skole bliver link i skolebus hvis skole findes etc.
Avatar billede nmh Nybegynder
15. december 2003 - 13:24 #57
Ok, men så er der nogle overvejelser, der skal gøres.
For øjeblikket bliver hver ord i teksten forsøgt slået op i ordlisten. Nu drejer det sig altså om at se om en del af ordet er i listen.
Strategien kunne være således:
For at undersøge ordet 'marxistiske' slås følgende ord op:
marx, marxi, marxis, marxist, marxisti, etc.
Så snart der er gevinst laves ordet om til et link.
Jeg forslår, at man altid starter med de 4 første bogstaver i ordet.
Det vil så for nogle ord betyde ganske mange opslag:
Et ord på 10 bogstaver vil give 7 opslag.
Det vil sige, det hele kommer til at køre tungere.
Men hvis dine sætninger ikke er ret lange, vil det sikkert fungere.Hvor mange ord vil der være i ordlisten?
Avatar billede Slettet bruger
15. december 2003 - 13:34 #58
den strategi vil vel betyde at kun marxist bliver til link i 'marxistiske' selvom 'marxistiske' måske findes i ordlisten?
> Men hvis dine sætninger ikke er ret lange, vil det sikkert fungere
Mener du sætningerne i ordlisten (som vi blev enige om kun at lade være ord), eller i indlæggene?
> Hvor mange ord vil der være i ordlisten?
Jeg ved det ikke, den vil vokse med tiden. Jeg har selv hældt 46 ord derind, men jeg tror at ca. 500-600 vil være et realistisk bud på lang sigt.
Avatar billede nmh Nybegynder
15. december 2003 - 13:41 #59
Sætninger:
Jeg mener de sætninger, der skal behandles og sættes link ind i.
Strategi:
Med mit forslag, vil marx, marxisme og marxistisk alle blive erstattet med samme link, som om der kun stod marx.
Avatar billede Slettet bruger
15. december 2003 - 13:47 #60
De sætninger der skal behandles og sættes links ind i, kan være vilkårligt lange (ligesom indlæggene her på sitet)
Strategien må være at finde ud af om det pågældende ord 'marxistiske' findes i hele sin længde og hvis det er tilfældet, linkes der til 'marxistiske'. Ellers, hvis det ikke findes, men 'marxist' findes, så link til det, og lav KUN 'marxist' til link (<a href="ord.asp?id=0986">marxist</a>iske ), hvis 'marxist' heller ikke findes men 'marx' findes, så lav KUN 'marx' til link (<a href="ord.asp?id=0985">marx</a>istiske) osv osv.
Avatar billede nmh Nybegynder
15. december 2003 - 14:02 #61
Det kan jeg godt lave. Men så må du hæve pointtallet. :o)

Er det så også ok, at undlade at søge på de 3 første bogstaver med mindre ordet kun er på 3 bogstaver?
Avatar billede Slettet bruger
15. december 2003 - 14:05 #62
hvad med 200 points oven i hatten?
Ja, det er ok :)
Avatar billede nmh Nybegynder
15. december 2003 - 14:09 #63
OK, så du hæver dette sp.m. til 200.
(200 er max pr. spørgsmål)
Avatar billede Slettet bruger
15. december 2003 - 14:12 #64
Jeps, det er hermed gjort. Måske kan du bruge noget af tankegangen fra http://www.dudal.com/dcmpage/quicksearch/
Avatar billede nmh Nybegynder
15. december 2003 - 20:21 #65
Mon ikke dette er, hvad du ønsker?

Option Explicit
dim arrOrd(1,10), N, tekst, i, txt

arrOrd(0,0)="5":arrOrd(1,0)="fÆrge"
arrOrd(0,1)="18":arrOrd(1,1)="Aben"
arrOrd(0,2)="7":arrOrd(1,2)="kØrte"
arrOrd(0,3)="6":arrOrd(1,3)="gåse"
arrOrd(0,4)="33":arrOrd(1,4)="cyKel"
arrOrd(0,5)="77":arrOrd(1,5)="dreng"
arrOrd(0,6)="2":arrOrd(1,6)="marx"
arrOrd(0,7)="2":arrOrd(1,7)="skoledreng"
arrOrd(0,8)="2":arrOrd(1,8)="marxistisk"
arrOrd(0,9)="2":arrOrd(1,9)="skole"
arrord(0,10)="99":arrord(1,10)="biL"
tekst="En bil kom kørende. Drengen troede at han kørte på en cykel, men ville hellere køre bil, men så var det en færge. Skoledrengen kunne ikke lide marx. Marxisme sagde ham intet. Han havde mødt for mange marxistiske personer. Skolepigen mente det samme."
N=Ubound(arrOrd,2)

sub Sort(A)
'A skal være en tabel af form A(1,n)
'tabellen A sorteres efter 2.plads. CombSort
'alle bogstaver laves om til små bogstaver.
  dim n, gap,OK,i,j,tmp
  n=Ubound(A,2)
  for i=0 to n
    arrOrd(1,i)=Lcase(arrOrd(1,i))
  next
  gap = n
  ok = True
  While ok
    If gap < 1 Then gap = 1
    ok = (gap <> 1)
    For i = 0 To n - gap
      j = i + gap
      If A(1,i) > A(1,j) Then
        tmp = A(0,j): A(0,j) = A(0,i): A(0,i) = tmp
        tmp = A(1,j): A(1,j) = A(1,i): A(1,i) = tmp 
        ok=true
      End If
    Next
    gap = Int(gap / 1.33) 'Tallet 1.33 er bedst
  Wend
end sub

function fundet(ord,nr)
  dim i,j,k,tblOrd
  fundet=false
  i=0: j=N
  do
    k=(i+j)\2
    tblOrd=arrOrd(1,k)
    if ord=tblOrd then
      fundet=true: nr=arrOrd(0,k)
      exit function
    elseif ord>tblOrd then
      i=k+1
    else
      j=k-1
    end if
  loop until i>j
end function


function Link(Ord)
  dim i, nr, L, ord1, Vdel
  ord1=Lcase(Ord): L=len(ord1)
  i=L
  do
    Vdel=left(ord1,i)
    if fundet(Vdel,nr) then
      Link="<a href=""ord.asp?id=" & nr & """>" & Vdel & "</a>" & right(ord1,L-i)
      exit function
    end if
    i=i-1
  Loop until i<=3
  Link=Ord
end function

function LinkTekst(tekst)
  dim p, ord, tmp, ch,L
  const Bgst="abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"
  p=1: L=len(tekst)
  while p<=L
    ch=mid(tekst,p,1):p=p+1
    while Instr(Bgst,ch)>0 and p<=L+1
      ord=ord & ch
      ch=mid(tekst,p,1)
      p=p+1
    wend
    if ord<>"" then
      tmp=tmp & Link(ord) & ch
      ord=""
    else
      tmp=tmp & ch
    end if
  wend
  LinkTekst=tmp
end function

sort arrOrd
'Her er en testudskrift.
'MsgBox Linktekst(tekst)
Avatar billede Slettet bruger
16. december 2003 - 11:57 #66
Det er jo smukt!! Bare lige en ting: hvis der i et indlæg skrives Marxisme med stort, bliver det, når det bliver lavet til link, lavet om til små bogstaver.
Avatar billede nmh Nybegynder
16. december 2003 - 12:52 #67
Hvis funktionen Link(ord) ændres lidt burde det problem være løst.

function Link(Ord)
  dim i, nr, L, ord1, Vdel
  ord1=Lcase(Ord): L=len(ord1)
  i=L
  do
    Vdel=left(ord1,i)
    if fundet(Vdel,nr) then
      Link="<a href=""ord.asp?id=" & nr & """>" & left(ord,i) & "</a>" & right(ord1,L-i)
      exit function
    end if
    i=i-1
  Loop until i<=3
  Link=Ord
end function
Avatar billede nmh Nybegynder
16. december 2003 - 13:16 #68
Hvis 'bil' er i listen vil 'bildør' ikke komme med, men hvis man ændrede på  det, så ville 'billede' komme med.

Det må vist blive, som det er.
Avatar billede Slettet bruger
16. december 2003 - 13:18 #69
Hmm, der er da ikke noget nyt i den funktion du skriver 16/12-2003 12:52:05 ?
Avatar billede nmh Nybegynder
16. december 2003 - 13:26 #70
jo:
før:Link="<a href=""ord.asp?id=" & nr & """>" & Vdel & "</a>" & right(ord1,L-i)

nu:Link="<a href=""ord.asp?id=" & nr & """>" & left(ord,i) & "</a>" & right(ord1,L-i)
Avatar billede Slettet bruger
16. december 2003 - 13:29 #71
ahh ja ok :)

Hvad mener du med kommentaren 16/12-2003 13:16:56
Avatar billede nmh Nybegynder
16. december 2003 - 13:34 #72
Jeg gav blot et eksempel, der viser, at man ikke alt er perfekt.
Vi har valgt, at undersøge på dele af et ord, men stoppe, når man når til, at man kun medtager de 3 første bogstaver.
Ordene 'bildør' og 'billede' viser, at der ikke er en løsning på dette.
Man må klare det i seve ordlisten.
Avatar billede Slettet bruger
16. december 2003 - 13:39 #73
Fint nok. Hvad mener du med at man må "klare" det i ord listen?
Avatar billede nmh Nybegynder
16. december 2003 - 13:42 #74
Hvis man vil have 'bildør' med, så må dette ord være i ordlisten.
Det er ikke nok blot at have ordet 'bil'.
Avatar billede Slettet bruger
16. december 2003 - 13:43 #75
ah ja på den måde :)
Avatar billede Slettet bruger
16. december 2003 - 13:45 #76
bare lige en tanke: hvis det nu viser sig at blive en performancemæssig dræber, tror du så der ville være noget hente, hvis man kun hentede selve ordet fra databasen og ikke dets id. Og så linkede til ord.asp?ord=marx i stedet for ord.asp?id=9 ?
Avatar billede nmh Nybegynder
16. december 2003 - 13:50 #77
nej, jeg tror ikke der vil være så meget at hente her. Men prøv med en tekst, som du synes er realistisk i længde, for at se om det kører for langsomt.
Hvis der er mange lange ord i teksten, vil der blive lavet mange opslag i ordlisten.

Men du er velkommen til at spørge løs fremover.
Avatar billede Slettet bruger
16. december 2003 - 13:52 #78
Tak. Og iøvrigt tak for et supergodt stykke arbejde!
Avatar billede nmh Nybegynder
16. december 2003 - 13:57 #79
Selv tak, det var så lidt.
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