webForumDet fria alternativet

Räkna ord

ASP

10 svar · 539 visningar · startad av J.N.

Medlem sedan apr. 20031 660 inlägg
Frågan#1

HEJ!

Jag vill räkna ord, vilket jag löst genom att räkna antal mellanslag + 1.
Men, det blir fel när det finns radbrytningar.

Hämtar orden med en trim-funktion, vilken tar bort inledande/avslutande mellanslag. Har trott att den skulle fixa enter också, men så är inte fallet.

Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.Pattern = "\s+" 'mellanslag: räknar ej flera flera efter varandra
Set Matches = objRegExp.Execute(orden)

response.write Matches.count + 1

Exempel:
lorem
ipsum
[enter]

ger 3 ord

Trodde mig ha sett en lösning på detta problem, men nej.

Medlem sedan nov. 20017 144 inlägg
#2

Ja, efersom att \s även träffar bl.a. \n

objRegExp.Pattern = " +"
Medlem sedan apr. 20031 660 inlägg
#3

HEJ!

Nja, då får jag ingen träff med "lorem<enter>ipsum<enter>". Tar jag bort det sista <enter> får jag två i resultat, vilket ju är korrekt!

Ska \s träffa \n också?
"Matches only on a blank space" säger DevGuru?
Eller det räknas som "blank space", fast i höjdled?

Medlem sedan nov. 20017 144 inlägg
#4

Detta då: (^\s|\s$)

Medlem sedan apr. 20031 660 inlägg
#5

HEJ!

Nej, den fungerar inte alls, noll för två ord i rad?!

Jag trodde inte detta var så svårt!

Medlem sedan nov. 20017 144 inlägg
#6

...noll för två ord i rad?!
Vad menar du?

Medlem sedan apr. 20031 660 inlägg
#7

HEJ!

Att det blir noll i resultat.

Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.Pattern = "(^\s|\s$)"
Set Matches = objRegExp.Execute(orden)

response.write Matches.count
ger 0 ord

för:
lorem ipsum
Medlem sedan nov. 20017 144 inlägg
#8

(\b\w)

Red/ om du tänker dig Ö eller Å som ett eget ord så får du göra något såndant hära: (\b\w|Ö|Å)

Medlem sedan apr. 20031 660 inlägg
#9

HEJ!

Jag testade utan åö, och det fungerar perfekt!

Sedan lade jag till å|ö, och IgnoreCase=True.
Och den räknade rätt på åÖÅö också! lorem ipsum å Ö
Sedan krånglade jag till det med lårem ipsöm vilket gav sex ord!

Hur i all sin dar blir det så?
Lite klurande gav att den räknar l+å+rem ips+ö+m=6 st...

Det går säkert att komma undan genom att kontrollera att det inte finns bokstäver före/efter åö.

Medlem sedan dec. 20025 483 inlägg
#10
  dim re
  set re = new regexp

  re.pattern = "\b[^\s]+\b"
  re.global  = true

  dim words
  set words = re.execute(orden)

  ' words.count = antal ord

  set re = nothing
Medlem sedan apr. 20031 660 inlägg
#11

HEJ!

Jag körde din senaste kod parallellt med min originalkod, och det fungerar utmärkt! Den fixar radbrytning, och räknar inte med smiliesar, eller binde-/talstreck heller, för den delen.

598 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
461 ms — ändringar (db)