Avatar billede mick Nybegynder
09. april 2005 - 15:38 Der er 27 kommentarer og
1 løsning

Søge i tekststreng

Hvordan søger jeg enklest efter forekomster af et ord i en tekststreng?

Eks: Jeg har en tekststreng som indeholder en tekst på 1000 tegn. Jeg ønsker at undersøge om teksten "eksperten" findes i strengen. Hvordan gøre dette enklest?
Avatar billede jsc Nybegynder
09. april 2005 - 15:41 #1
denne metode er nem:

midlertidig = søgestreng
if søgestreng = replace(midlertidig, "eksperten", "") then
'"eksperten" findes ikke i søgestrengen
else
'"eksperten" findes
end if
Avatar billede busschou Praktikant
09. april 2005 - 15:46 #2
Avatar billede busschou Praktikant
09. april 2005 - 15:47 #3
jsc >> Problemet med dit foreslag er jo at den går hele strengen "midlertid" igennem og når den finder "eksperten" så retter den det til "" ...
Er vel ikke smart at den sletter søgeordet ;o)
Avatar billede busschou Praktikant
09. april 2005 - 15:49 #4
instr(dinstreng,"eksperten")
Den bør retunere 0 hvis ikke fundet og ellers mener jeg den returnerer positionen
Avatar billede jsc Nybegynder
09. april 2005 - 15:51 #5
det kan da være fuldstændig ligemeget, man bruger jo ikke midlertidig til andet... - men ja, din metode virker da også.

(jeg må være vild med replace())

/jsc
Avatar billede jsc Nybegynder
09. april 2005 - 15:52 #6
det er ligemget, så længe han ikke ønsker andet...

/jsc
Avatar billede mick Nybegynder
09. april 2005 - 15:55 #7
Takker for svarene.

Jeg burde nok have forklaret mig lidt bedre. Jeg ønsker egentlig at finde positionen til første tegn efter teksten der søges efter.

Jeg vil lige se på funktionen instr, det lyder som om den skulle kunne bruges.
Avatar billede plx Nybegynder
09. april 2005 - 15:56 #8
Faktisk behøver man vel slet ikke midlertidig variablen

if søgestreng = replace(søgestreng, "eksperten", "") then

har helt den samme effekt, uden at ændre i den originale streng
Avatar billede busschou Praktikant
09. april 2005 - 15:57 #9
jsc >> hehe sorry jeg må åbne øjnene . Jeg så kun din if og af en og anden grund ikke at du hev den midlertidig ud.. Så ja..enig i at det ikke skader når det ikke er den "rigtige" streng der laves replace på :o)
Avatar billede jsc Nybegynder
09. april 2005 - 15:57 #10
ja, men hvis du gør sådan, så ødelægger du søgestrengen...

/jsc
Avatar billede jsc Nybegynder
09. april 2005 - 15:58 #11
præcis ;)
Avatar billede plx Nybegynder
09. april 2005 - 16:00 #12
replace ændrer ikke i den streng du giver som parameter. Den nye og ændrede streng bliver returneret af funktionen..
Avatar billede jsc Nybegynder
09. april 2005 - 16:01 #13
ja, netop, så har du jo også ødelagt søgestrengen for "eksperten".... - det duer jo ikke.

hvad nu hvis man skal bruge søgestrengen senere plx ?

/jsc
Avatar billede busschou Praktikant
09. april 2005 - 16:04 #14
jsc >> replace ændrer ikke strengen ... if sætningen sammenligner og tildeler ikke
Replace returnerer en streng hvor "eksperten" er skiftet ud
Den ændrer den kun hvis du tildeler den returnerede streng til søgestrengen :o)
Avatar billede busschou Praktikant
09. april 2005 - 16:04 #15
anyways..smider et svar hvis du kan bruge mit foreslag :o)
Avatar billede jsc Nybegynder
09. april 2005 - 16:06 #16
ja okay, fair... havde jeg ikke lige set, men det ville da være fuldstændig tåbeligt at gøre som plx, hvis man gør det på min metode... - det bliver uoverskueligt

.. skid nu med mit "nederlag" :)

spørgsmålet er løst

/jsc
Avatar billede busschou Praktikant
09. april 2005 - 16:09 #17
Det er jo forskelligt hvad folk synes er overskueligt..
Jeg synes fx det er mere overskueligt at undersøge om noget er i en streng ved at bruge den funktion som findes til det ;o)
Men bortset fra det ja..så er replace da også en dejlig funktion :o)
Avatar billede jsc Nybegynder
09. april 2005 - 16:12 #18
:) det er selvfølgelig rigtig :O

kendte den ikke - men sidder lige og læser om den, og den har en smart ekstra funktion... den kan springe x antal tegn over, hvis man "kender" noget af den i forvejen... instr(xx, streng, ord) - det var da også meget nyttigt...

/jsc
Avatar billede plx Nybegynder
09. april 2005 - 16:13 #19
For lige at slutte af.. :)

Hvis man skulle gøre det med replace, på den mest 'overskuelige' måde:

midlertidig = replace(søgestreng, "eksperten", "")
if søgestreng = midlertidig then


men enig med busschou, at replace nok ikke er den bedste funktion i dette tilfælde :)
Avatar billede jsc Nybegynder
09. april 2005 - 16:15 #20
jeps...

replace er udelukkende god til at erstatte (siger sig selv) - så med mindre jeg lavdede google forfra, så ville jeg nok til at starte med jeres instr()... - replace er jo bare så smart, at den kan sætte noget html kode ind, så ordet f.eks. bliver FED eller KURSIV osv. - det har jeg brugt meget til mine søgefunktioner på mine sider og databaser.

slut herfra

/jsc
Avatar billede mick Nybegynder
09. april 2005 - 16:17 #21
Mange tak for hjælpen. Instr var lige hvad jeg havde brug for
Avatar billede cpufan Juniormester
09. april 2005 - 16:38 #22
for at blive ved med at ævle:
ovennævnte instr() funktion finder kun den første forekomst,
så hvis der er flere forekomster, og du skal have positionen af alle forekomster vil den jo give et falsk svar..
Avatar billede busschou Praktikant
09. april 2005 - 16:43 #23
yes men så kan man jo sætte en løkke på og for hver forekomst lave en instr(start,streng,søgeord) og så kan man endvidere tælle op på antal forekomster :o)
Avatar billede jsc Nybegynder
09. april 2005 - 16:43 #24
så må du til at lave en løkke:
position = 0
for t = 1 to ubound(streng)
position = instr(position, streng, "eksperten")
positioner = positioner & position & ";"
next

'positioner af eksperten:
positioner = split(positioner, ";")

for t = 0 to ubound(positioner) - 1
response.write positioner(t)
next


/jsc
Avatar billede cpufan Juniormester
09. april 2005 - 16:47 #25
ja, så kan jeg godkende ;o)
Avatar billede busschou Praktikant
09. april 2005 - 16:49 #26
jsc >> ja nemlig ja :o)
eneste minus jeg ser er tilfældet hvor ordet ikke findes
Så har man en for løkke som måske er meeeget lang
Eller ja det har man jo uanset hvad
Så hvis jeg skulle gøre det ville jeg nok lave en funktion som kaldte sig selv hvis der blev fundet en position forskellig fra 0
Avatar billede jsc Nybegynder
09. april 2005 - 16:50 #27
nå ja... glemte jeg sgu lige ;O)
Avatar billede cpufan Juniormester
09. april 2005 - 17:02 #28
et andet minus ved sidste funktion,
er vel også at hvis ordet først findes på position 9000
kører løkken 9000 gange inden den finder første,
derefter kører løkken så også det antal gange som ordet er langt(hvor der ikke kan findes nye forekomster) og så kører løkken ellers indtil man er nået til strengen slut.
Jeg ved godt der ikke er så meget cpu-sug på den løkke, men alligevel.
der skal på en eller anden måde laves en rekursiv forespørgsel
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