webForumDet fria alternativet

sålla ut och markera ord i en lista...

ASP

29 svar · 1 256 visningar · startad av Eclipse · sida 2 av 2

Frågan, av Eclipse

Jag har en topplista som jag vill plocka ut orden i. Markera orden i. 3 - ukrainas natur 1 - ukrainas ambassad 1 - ukraina visa 1 - ukraina turism 1 - sveriges ambassad i ukraina 1 - fakta om kiev 1 - fakta kiev 1 - allakiev Hur skriver jag med kod: Leta reda på alla ord mellan " - " och vbCRLF och gör dom i en speciell kod...

Läs frågan i sin helhet →
Medlem sedan juni 20019 519 inlägg
#21
<%
Function FormatList(strText)
	strText = strText & vbCRLF
	Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Global = True
	re.Pattern = "(\d+ - )([^\n]+)\n" ' La dit \d+ för talen i början av strängen
	dim myMatches
	Set myMatches = re.Execute(strText)
	For Each myMatch In myMatches
		FormatList = FormatList & checkThisWord(myMatch.SubMatches(1))
	Next
End Function

Function checkThisWord(word)
	If Right(word,3) = ".se" Then word = Replace(word, ".se", "")
	word = replace(word, " ", "")
	word = replace(word, ".", "")
	checkThisWord = "<b>" & word & " LEN: " & Len(word) - 1 & "</b><br>"
End Function

dim str
str = "3 - ukrainas natur" & vbCrLf & "1 - ukrainas ambassad" & vbCrLf & "1 - ukraina visa" & vbCrLf & "1 - ukraina turism" & vbCrLf & "1 - sveriges ambassad i ukraina" & vbCrLf & "1 - fakta om kiev" & vbCrLf & "1 - fakta kiev" & vbCrLf & "1 - allakiev" & vbCrLf

Response.Write FormatList(str)

%>
Medlem sedan juli 20003 825 inlägg
#22

Listan ser ut som den ser ut... Men om det nu är ett problem så får jag ta mig tid att skapa listan utifrån andra kriterier. Är det helt omöjligt att separera ord på detta viset!?

Att jag skrev: strText = strText & vbCRLF

berodde på att det inte fanns en radbrytning i slutet. Not a big deal. Det sista ordet fungerade inte.

Men texten blir ju FET. Det borde fungera...!? Ordet skrivs ju ut. Varför går det inte att skicka ordet som ett värde till en annan funktion? Det är sånt man kan undra...!

Medlem sedan juni 20019 519 inlägg
#23

Eclipse skrev:

Men texten blir ju FET. Det borde fungera...!? Ordet skrivs ju ut. Varför går det inte att skicka ordet som ett värde till en annan funktion? Det är sånt man kan undra...!

Varför? Vi skickade inte vad RegExpet har hittat vi skickade in en sträng "$2" (mitt fel mest). Det är inte förrän efter CheckThisWord har körts vi kör RegExpets replace. Men funktionen ovan skall ha fixat det

Kolla koden ovan den skall fungera som du vill.

Medlem sedan juli 20003 825 inlägg
#24

Vi skriver om varandra här. Jag har testat din kod.

****
OK, Gött mos, broder!

ÄNTLIGEN fungerar det! Det var nog FOR-loopen som gjorde skillnaden!!

Nu ska jag rensa i 2 km kod... och fixa med radbrytningar, med mera! Hinner inte det just nu.

Medlem sedan juni 20019 519 inlägg
#25
Function FormatList(strText)
	strText = strText & vbCRLF
	Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Global = True
	re.Pattern = "\d+ - ([^\n]+)\n"
	dim myMatches
	Set myMatches = re.Execute(strText)
	dim newText
	For Each myMatch In myMatches
		FormatList = FormatList & checkThisWord(myMatch.SubMatches(0))
	Next
End Function

tog bort () från \d+ - då man inte verkar vara intresserad på att ha den som en "submatch". Och ändrade myMatch.SubMatches(1) till myMatch.SubMatches(0). Inte någon direkt prestanda ökning men om man inte behöver den så behöver man den inte ;)

bra att det fungera nu iallafall. Acceptera ett svar som lösning på din tråd för att hjälpa andra ;)

Medlem sedan juli 20003 825 inlägg
#26

Ja!

Jag ska "Acceptera som slutgiltigt svar" men jag tänkte vänta tills jag fått allt att fungera - på riktigt så att säga - samt att du är (någorlunda) färdig med att redigera tidigare inlägg...! :-)

***
Red: Förslag!?

Medlem sedan juli 20003 825 inlägg
#27

Bra att jag inte avslutat tråden. Två saker fungerar inte.

str = "3 - ukraina.se" & vbCrLf & "3 - ukrainas natur" & vbCrLf & "1 - ukrainas ambassad" & vbCrLf & "1 - ukraina visa" & vbCrLf & "1 - ukraina turism" & vbCrLf & "1 - sveriges ambassad i ukraina" & vbCrLf & "1 - fakta om kiev" & vbCrLf & "1 - fakta kiev" & vbCrLf & "1 - allakiev" & vbCrLf

1. samma som det du skrev, men första posten är ukraina.se

Resultatet blir inte ukraina, som det står i koden utan ukrainase. Bara punkten försvinner. Koden: replace(word, ".se", "") verkar inte köras.

***
2. Siffrorna försvinner!

3 - ukraina.se
3 - ukrainas natur
1 - ukrainas ambassad
1 - ukraina visa
1 - ukraina turism
1 - sveriges ambassad i ukraina
1 - fakta om kiev
1 - fakta kiev
1 - allakiev

***
OBS! Detta är fortfarande exempel!! Men det är viktigt att det står siffra , mellanslag, sträck mellanslag före ordet.

Medlem sedan juli 20003 825 inlägg
#28
<%
Function FormatList(strText)
	strText = strText & vbCRLF ' <-- ### OSB!! Måste vara med!!
	Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Global = True
	re.Pattern = "\d+ - ([^\n]+)\n"
	dim myMatches
	Set myMatches = re.Execute(strText)
	dim newText
	For Each myMatch In myMatches
		FormatList = FormatList & checkThisWord(myMatch.SubMatches(0))
	Next
End Function

Function checkThisWord(word)
	If Right(word,3) = ".se" Then word = Replace(word, ".se", "")
	word = replace(word, " ", "")
	word = replace(word, ".", "")
	checkThisWord = "<b>" & word & " LEN: " & Len(word) - 1 & "</b><br>"
End Function

dim str
str = "3 - ukraina.se" & vbCrLf & "3 - ukrainas natur" & vbCrLf & "1 - ukrainas ambassad" & vbCrLf & "1 - ukraina visa" & vbCrLf & "1 - ukraina turism" & vbCrLf & "1 - sveriges ambassad i ukraina" & vbCrLf & "1 - fakta om kiev" & vbCrLf & "1 - fakta kiev" & vbCrLf & "1 - allakiev" & vbCrLf

Response.Write FormatList(str)
%>
Medlem sedan juni 20019 519 inlägg
#29
<%
Function FormatList(strText)
	[b]' Nej det behövs inte enligt de kriterier du har skickat till oss. Fungera enligt ditt exempel utan några problem.[/b]
	'strText = strText & vbCRLF ' <-- ### OSB!! Måste vara med!!
	Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Global = True
	re.Pattern = "[b](\d+ - )[/b]([^\n]+)\n"
	dim myMatches
	Set myMatches = re.Execute(strText)
	dim newText
	For Each myMatch In myMatches
		FormatList = FormatList & [b]myMatch.SubMatches(0)[/b] & checkThisWord(myMatch.SubMatches([b]1[/b]))
	Next
	[b]Set re = Nothing[/b]
End Function

Function checkThisWord(word)
	[b]Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.Global = True
	re.Pattern = "(.*?)(.se)?"
	word = re.replace(word,"$1")
	set re = Nothing[/b]
	word = replace(word, " ", "")
	word = replace(word, ".", "")
	checkThisWord = "<b>" & word & " LEN: " & Len(word) - 1 & "</b><br>"
End Function

dim str
str = "3 - ukraina.se" & vbCrLf & "3 - ukrainas natur" & vbCrLf & "1 - ukrainas ambassad" & vbCrLf & "1 - ukraina visa" & vbCrLf & "1 - ukraina turism" & vbCrLf & "1 - sveriges ambassad i ukraina" & vbCrLf & "1 - fakta om kiev" & vbCrLf & "1 - fakta kiev" & vbCrLf & "1 - allakiev" & vbCrLf

Response.Write FormatList(str)
%>
Medlem sedan juli 20003 825 inlägg
#30

Äntligen... Phew!

Vilken kamp! Ett stort tack till dig, broder! Du är verkligen duktig på regExp!

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)