15. september 2007 - 02:25
Der er
63 kommentarer og 1 løsning
Slette HTML og finde tal
Hej... Nu har jeg lige fået lavet mig denne kode... - Men vil gerne kun have de resultater der er formateret således på siden: 12.000,50, 6.195,50 eller 615,50 (Eller lign.) - Og evt. en reg-kode hvor den sletter alle html-koder dvs. alt inden for < og > ?? - Hvis det er muligt så også finde indholdet mellem ordet: "tekst12" og "tekst13" ?? Kode...: -------------------------------------------------------- set Req = Server.CreateObject("Msxml2.ServerXMLHTTP") Req.open "GET", url, False Req.Send Set re = New RegExp re.Global = True re.Pattern = "\d+" Set matches = re.Execute(req.responseText) If matches.Count > 0 Then smallest = matches(0) largest = matches(0) For i=1 To matches.Count-1 tal = +matches(i) If tal < smallest Then smallest = tal ElseIf tal > largest Then largest = tal End If Next Response.Write "Mindste: " & smallest & "<br>" Response.Write "Største: " & largest & "<br>" End If
Annonceindlæg fra Barco
15. september 2007 - 08:33
#1
Skal vi ikke lige holde alle oplysningerne i det samme spørgsmål?
Fra:
http://www.eksperten.dk/spm/726303 > Nu har jeg lige fået lavet mig denne kode...
> Men vil gerne kun have de resultater der er formateret således på siden: 6.195,50 (f.eks.)
> Og evt. en reg-kode hvor den sletter alle html-koder dvs. alt inden for < og > ??
15. september 2007 - 08:37
#2
> Men vil gerne kun have de resultater der er formateret således på siden: 6.195,50 (f.eks.) Prøv med dette pattern: re.Pattern = "\d{1,3}(\.\d{3})*(,\d+)" Derefter skal du have slettet punktummerne og efterfølgende have omdannet kommaet til et punktum (ellers vil ASP ikke lege med): tal = Replace(tal, ".", "") tal = Replace(tal, ",", ".")
15. september 2007 - 08:38
#3
> Og evt. en reg-kode hvor den sletter alle html-koder dvs. alt inden for < og > ?? Set re = New RegExp re.Global = True re.Pattern = "<.*?>" kode = re.Replace(kode, "")
15. september 2007 - 11:47
#4
Hvordan kan jeg implanmentere det i scriptet...?
15. september 2007 - 17:18
#5
Noget i denne stil: Set Req = Server.CreateObject("Msxml2.ServerXMLHTTP") Req.Open "GET", url, False Req.Send Set re = New RegExp re.Global = True re.Pattern = "\d{1,3}(\.\d{3})*(,\d+)" Set matches = re.Execute(Req.ResponseText) If matches.Count > 0 Then tal = matches(0) tal = Replace(tal, ".", "") tal = Replace(tal, ",", ".") smallest = tal largest = tal For i=1 To matches.Count-1 tal = matches(i) tal = Replace(tal, ".", "") tal = Replace(tal, ",", ".") tal = +tal If tal < smallest Then smallest = tal ElseIf tal > largest Then largest = tal End If Next Response.Write "Mindste: " & smallest & "<br>" Response.Write "Største: " & largest & "<br>" End If
15. september 2007 - 18:25
#6
Hvad hvis jeg skal have den funktion: "- Hvis det er muligt så også finde indholdet mellem ordet: "tekst12" og "tekst13" ??"
15. september 2007 - 18:43
#7
Kan du give et eksempel på hvordan du ønsker at kombinere dennne med det ovenstående?
15. september 2007 - 18:50
#8
Så den først indskrænker området mellem "tekst12" og "tekst13" og så køre den scriptet du lige fik lavet 17:18:04
15. september 2007 - 18:59
#9
Noget i denne stil: Set Req = Server.CreateObject("Msxml2.ServerXMLHTTP") Req.Open "GET", url, False Req.Send Set re = New RegExp re.Global = True re.Pattern = "tekst12(.*)tekst13" text = re.Replace(Req.ResponseText, "$1") re.Pattern = "\d{1,3}(\.\d{3})*(,\d+)" Set matches = re.Execute(text) If matches.Count > 0 Then tal = matches(0) tal = Replace(tal, ".", "") tal = Replace(tal, ",", ".") smallest = tal largest = tal For i=1 To matches.Count-1 tal = matches(i) tal = Replace(tal, ".", "") tal = Replace(tal, ",", ".") tal = +tal If tal < smallest Then smallest = tal ElseIf tal > largest Then largest = tal End If Next Response.Write "Mindste: " & smallest & "<br>" Response.Write "Største: " & largest & "<br>" End If
15. september 2007 - 19:42
#10
det virker ikke... der kommer stadig de samme resultater som i 17:18:04
15. september 2007 - 19:47
#11
Det burde der altså ikke. Men prøv da med noget debug udskrivning: Set Req = Server.CreateObject("Msxml2.ServerXMLHTTP") Req.Open "GET", url, False Req.Send text = Req.ResponseText Set re = New RegExp re.Global = True Response.Write "DEBUG (før): " & text & "<hr><br>" re.Pattern = "tekst12(.*)tekst13" text = re.Replace(text, "$1") Response.Write "DEBUG (efter): " & text & "<hr><br>" re.Pattern = "\d{1,3}(\.\d{3})*(,\d+)" Set matches = re.Execute(text) If matches.Count > 0 Then tal = matches(0) tal = Replace(tal, ".", "") tal = Replace(tal, ",", ".") smallest = tal largest = tal For i=1 To matches.Count-1 tal = matches(i) tal = Replace(tal, ".", "") tal = Replace(tal, ",", ".") tal = +tal If tal < smallest Then smallest = tal ElseIf tal > largest Then largest = tal End If Next Response.Write "Mindste: " & smallest & "<br>" Response.Write "Største: " & largest & "<br>" End If
15. september 2007 - 19:55
#12
Den debug'er det samme... både før og efter...
15. september 2007 - 20:17
#13
Prøv at ændre denne: re.Pattern = "tekst12(.*)tekst13" til: re.Pattern = ".*?tekst12(.*)tekst13.*?"
15. september 2007 - 20:22
#14
Du kan se her...:
http://www.mollo.dk/script/36/1.asp Og min kode nøjaktige kode ser sådan ud...:
-------------------------------------------------------
url = "
http://www.elvvs.dk/search.php?query=EL-5450-5" set Req = Server.CreateObject("Msxml2.ServerXMLHTTP")
Req.open "GET", url, False
Req.Send
text = Req.ResponseText
Set re = New RegExp
re.Global = True
Response.Write "DEBUG (før): " & text & "<hr><br>"
re.Pattern = ".*?Søgningen i info efter(.*)Søgningen i shoppen efter.*?"
text = re.Replace(text, "$1")
Response.Write "DEBUG (efter): " & text & "<hr><br>"
re.Pattern = "\d{1,3}(\.\d{3})*(,\d+)"
Set matches = re.Execute(text)
If matches.Count > 0 Then
tal = matches(0)
tal = Replace(tal, ".", "")
tal = Replace(tal, ",", ".")
smallest = tal
largest = tal
For i=1 To matches.Count-1
tal = matches(i)
tal = Replace(tal, ".", "")
tal = Replace(tal, ",", ".")
tal = +tal
If tal < smallest Then
smallest = tal
ElseIf tal > largest Then
largest = tal
End If
Next
Response.Write "Mindste: " & smallest & "<br>"
Response.Write "Største: " & largest & "<br>"
End If
16. september 2007 - 09:39
#15
Nu har du vel spurgt hos:
http://www.elvvs.dk om det er i orden med dem at du laver screen-scraping hos dem? Hvis ikke er du meget tæt på lovens rand. Blot så at du er advaret!
...
Så vidt jeg kan bedømme er det 'ø' som muligvis giver problemer. Prøv derfor med:
re.Pattern = ".*?S.gningen i info efter(.*?)S.gningen i shoppen efter.*?"
16. september 2007 - 17:38
#17
Mystisk. Et spørgsmål: Hvis du søger på forskellige produkter, vil der så ikke altid kun vøre et hit? Hvid set er tilføldet kan du vel søge efter: Pris excl. moms: <beløb nr 1> DKK Pris incl. moms: <beløb nr 2> DKK I stedetfor al den gymnastik med at udlede det største og det mindste tal?
16. september 2007 - 17:39
#18
vøre => være
16. september 2007 - 18:59
#19
Du mener at søge efter "Pris excl. moms" og "Pris incl. moms" ikke ? Vil hellere have det mindste og største... Så det lidt mere universalt... hvis jeg nu skal gøre det på andre sider også...
16. september 2007 - 19:08
#20
Sikker på det? Hvis der er mere end to produkter på en side: Produkt 1: Uden moms 1000 Med moms 1250 Produkt 2: Uden moms 1200 Med moms 1500 Så får du jo Minimum=1000 og Maksimum=1500 - men det er jo to forskellige produkter de to tal referere til.
16. september 2007 - 19:14
#21
16. september 2007 - 19:27
#22
Jeg kan ikke se siden - den kræver login.
16. september 2007 - 19:28
#23
16. september 2007 - 20:15
#24
kan du se denne side...
16. september 2007 - 20:42
#25
Ja, men på den er der et andet problem: [GA-N680SLI-DQ6] nF680SLi 775ATX FS1333 4DDR2-800 3+1PCIE 3PCI 1 2.449,00 Hvordan skelner du prisen fra alle tallene i produkt-oplysningerne?
16. september 2007 - 20:43
#26
... og hvordan ved du om prisen er angivet med eller uden moms?
16. september 2007 - 21:04
#27
Som jeg har forstået så finder den kun tallene med f.eks. denne formatering: "1.200,50" Eller hvad ?
16. september 2007 - 21:16
#28
Det er jo ikke alle priser som er oppe i 1000'erne... Desuden er der ikke nogen grænse på "øre-beløbet". Den vil derfor også match sådan noget som 3,5 som lige så godt kunne være betegnelsen for en floppy diskette som et kroner og øre beløb. Desuden er der stadig problemstillingen omkring hvorvidt et givent beløb er med eller uden moms. Personligt ville jeg aldrig satse på at kunne finde en løsning som g´jaldt for samtlige sider jeg kunne finde på at bruge den imod. Jeg ville kave en sægeskabelon pr. side.
16. september 2007 - 21:31
#29
Nu på: "
http://www.mollo.dk/script/36/1.asp" har jeg lavet den til at chekke filen "2.asp"
Der kan jeg godt se den ikke tæller 11.200,00 med, men alle de andre virker jo fint...
Løsnignen på det problem... kan man så ikke lede efter de tal der ender på 2 ciffer efter et komma ??
Løsningen på problemmet med med og uden moms er klaret... (brugern skal godkende enten den høje eller den lave pris...) :)
Kunne dette ikke være en løsning ?
16. september 2007 - 21:35
#30
> Der kan jeg godt se den ikke tæller 11.200,00 med, men alle de andre virker jo fint...
Det forstår jeg nu ikke - det burde den.
> Løsnignen på det problem... kan man så ikke lede efter de tal der ender på 2 ciffer efter et komma ??
Det kan du gøre med dette pattern:
re.Pattern = "\d{1,3}(\.\d{3})*,\d{2}"
> Løsningen på problemmet med med og uden moms er klaret... (brugern skal godkende enten den høje eller den lave pris...) :)
På linket:
http://shop.datatelpartner.dk/shop/advanced_search_result.php?keywords=1023870 er der kun een pris. Hvordan skal nogen kunne finde ud af om det er med eller uden moms uden at kende til den side hvor beløbet kommer fra?
16. september 2007 - 22:00
#31
>er der kun een pris. Hvordan skal nogen kunne finde ud af om det er med eller uden moms uden at kende til den side hvor beløbet kommer fra? Begge tal, både det største og det mindste kommer ind i mit system... men kun det med moms bliver vist til brugeren... (administratoren for siden exempelvis: fra datatel forudbestemmer hvilke priser der findes hvor...) - så det er ingen problem... :)
16. september 2007 - 22:05
#32
Tja, nu har jeg da forsøgt at advare dig: Jeg tror at der kommer et eller andet tidspunkt hvor dit system vil fejle. :^| ... Hvis vi lige hopper tilbage til det oprindelige problem i 16/09-2007 14:19:32 så tror jeg at det måske kan klares ved at du ændre: re.Pattern = ".*?S.gningen i info efter(.*?)S.gningen i shoppen efter.*?" til: re.Pattern = ".*?S.*?gningen i info efter(.*?)S.*?gningen i shoppen efter.*?"
16. september 2007 - 22:15
#33
Viker heller ikke... :/
16. september 2007 - 22:19
#34
Det må være noget med encoding - hvordan ø'er er repræsenteret. Hvad sker der hvis man forsøger at undgå den helt: re.Pattern = ".*?gningen i info efter(.*?)gningen i shoppen efter.*?"
16. september 2007 - 22:22
#35
Tror ikke det er noget med æøå... Virker ikke...
16. september 2007 - 22:41
#36
Det burde det - og det virker skam også for mig når jeg prøver det i andre sprog som f.eks. C#. Hvordan ser din kode ud?
16. september 2007 - 22:46
#37
url = "
http://www.elvvs.dk/search.php?query=EL-5450-5" set Req = Server.CreateObject("Msxml2.ServerXMLHTTP")
Req.open "GET", url, False
Req.Send
text = Req.ResponseText
Set re = New RegExp
re.Global = True
Response.Write "DEBUG (før): " & text & "<hr><br>"
re.Pattern = ".*?gningen i info efter(.*?)gningen i shoppen efter.*?"
text = re.Replace(text, "$1")
Response.Write "DEBUG (efter): " & text & "<hr><br>"
re.Pattern = "\d{1,3}(\.\d{3})*,\d{2}"
Set matches = re.Execute(text)
If matches.Count > 0 Then
tal = matches(0)
tal = Replace(tal, ".", "")
tal = Replace(tal, ",", ".")
smallest = tal
largest = tal
For i=1 To matches.Count-1
tal = matches(i)
tal = Replace(tal, ".", "")
tal = Replace(tal, ",", ".")
tal = +tal
Response.Write tal&"<br>"
If tal < smallest Then
smallest = tal
ElseIf tal > largest Then
largest = tal
End If
Next
Response.Write "Mindste: " & smallest & "<br>"
Response.Write "Største: " & largest & "<br>"
End If
16. september 2007 - 22:47
#38
Virker det også i asp med dig så ?
17. september 2007 - 06:49
#39
Jeg har desværre ikke lige nogen ASP server at uploade på. Det burde dog virke på ASP - det er rimeligt lige-ud regexp uden det store avancerede...
17. september 2007 - 10:13
#40
Hvad kan der så være galt med scriptet ?
17. september 2007 - 18:38
#41
Mit sidste bud:
url = "
http://www.elvvs.dk/search.php?query=EL-5450-5" Set Req = Server.CreateObject("Msxml2.ServerXMLHTTP")
Req.Open "GET", url, False
Req.Send
text = Req.ResponseText
Set re = New RegExp
re.Global = True
re.IgnoreCase = True
Response.Write "DEBUG (før): " & text & "<hr><br>"
re.Pattern = ".*?i info efter(.*?)i shoppen efter.*?"
text = re.Replace(text, "$1")
Response.Write "DEBUG (efter): " & text & "<hr><br>"
re.Pattern = "\d{1,3}(\.\d{3})*,\d{2}"
Set matches = re.Execute(text)
If matches.Count > 0 Then
tal = matches(0)
tal = Replace(tal, ".", "")
tal = Replace(tal, ",", ".")
smallest = tal
largest = tal
For i=1 To matches.Count-1
tal = matches(i)
tal = Replace(tal, ".", "")
tal = Replace(tal, ",", ".")
tal = +tal
Response.Write tal & "<br>"
If tal < smallest Then
smallest = tal
ElseIf tal > largest Then
largest = tal
End If
Next
Response.Write "Mindste: " & smallest & "<br>"
Response.Write "Største: " & largest & "<br>"
End If
17. september 2007 - 21:11
#42
Hehe.. ved ikke helt hvad der er galt... Men det virker stadig ikke... Ved du hvorfor den ikke tager det første tal med i beregningen for størreste og mindste værdi ? Hvad er patternet til at slette alle HTML-koder dvs. inden for < og > ??
17. september 2007 - 21:15
#43
Måske skulle vi ikke fokusere så meget på at klare alts sammen vie regexp. Hvad med at bruge InStr til at finde positionen af "tekst1" og "tekst2" og så bruge Mid() til at klippe det relevante stykke tekst ud?
17. september 2007 - 21:42
#44
Men vi skal stadig bruge funktionen til at finde tal ikke ? - Der kan den jo ikke finde det første tal !!
17. september 2007 - 21:49
#45
Lad os nu tage et problem ad gangen. Har du noget bud på hvordan du kunne gøre 17/09-2007 21:15:25?
17. september 2007 - 21:53
#46
Har siddet lidt med det og mit bud ville være, nedenstående... men syntes ikke rigtig det virker...:
<%
url = "
http://www.elvvs.dk/search.php?query=EL-5450-5" Set Req = Server.CreateObject("Msxml2.ServerXMLHTTP")
Req.Open "GET", url, False
Req.Send
text = Req.ResponseText
Set re = New RegExp
re.Global = True
re.IgnoreCase = True
Response.Write "DEBUG (før): " & text & "<hr><br>"
tekst_1 = "i info efter"
tekst_2 = "i shoppen efter"
tekst_1_pos=InStr(text,tekst_1)
tekst_2_pos=InStr(text,tekst_2)
tekst_1 = Left(text,tekst_1_pos)
tekst_2 = Right(text,tekst_2_pos)
text = Replace(text,tekst_1,"")
text = Replace(text,tekst_2,"")
Response.Write "DEBUG (efter): " & text & "<hr><br>"
re.Pattern = "\d{1,3}(\.\d{3})*,\d{2}"
Set matches = re.Execute(text)
If matches.Count > 0 Then
tal = matches(0)
tal = Replace(tal, ".", "")
tal = Replace(tal, ",", ".")
smallest = tal
largest = tal
For i=1 To matches.Count-1
tal = matches(i)
tal = Replace(tal, ".", "")
tal = Replace(tal, ",", ".")
tal = +tal
Response.Write tal & "<br>"
If tal < smallest Then
smallest = tal
ElseIf tal > largest Then
largest = tal
End If
Next
Response.Write "Mindste: " & smallest & "<br>"
Response.Write "Største: " & largest & "<br>"
End If
%>
17. september 2007 - 22:03
#48
Dine: tekst_1 = "i info efter" tekst_2 = "i shoppen efter" tekst_1_pos=InStr(text,tekst_1) tekst_2_pos=InStr(text,tekst_2) tekst_1 = Left(text,tekst_1_pos) tekst_2 = Right(text,tekst_2_pos) text = Replace(text,tekst_1,"") text = Replace(text,tekst_2,"") ... skal rettes til tekst_1 = "i info efter" tekst_2 = "i shoppen efter" tekst_1_pos = InStr(tekst_1, text) tekst_2_pos = InStr(tekst_2, text) text = Mid(text, tekst_1_pos, tekst_2_pos-tekst_1_pos)
17. september 2007 - 22:06
#49
Invalid procedure call or argument: 'Mid'
17. september 2007 - 22:36
#50
Prøv lige at udskrive nærdierne af tekst_1_pos og tekst_2_pos.
17. september 2007 - 22:43
#51
Fik lige leget lidt med det... (kan du se) Fejlen var..: tekst_1_pos = InStr(tekst_1, text) tekst_2_pos = InStr(tekst_2, text) til... tekst_1_pos = InStr(text, tekst_1) tekst_2_pos = InStr(text, tekst_2)
17. september 2007 - 22:54
#52
Det lader da til det virker kanon nu var ? Du kan ikke se at der skulle være noget galt lige umidbart vel ? :)
17. september 2007 - 22:55
#53
Min fejl ... det var mig som byttede om på dem. :^|
17. september 2007 - 22:55
#54
17. september 2007 - 22:59
#55
Den virker helt fint hos mig...
17. september 2007 - 23:01
#56
Jeg må have testet mens du var ved at uploade eller noget i den stil :^)
17. september 2007 - 23:02
#57
Smutter for i dag. 'nat. :^)
17. september 2007 - 23:04
#58
1000 tak for hjælpen... Hvis du lægger et svar godkender jeg... Sig til hvis du vil ha lidt ektra point for den goe ydelse... :)
18. september 2007 - 06:45
#59
Du får et svar :^) Men havde du ikke et par spørgsmål mere undervejs?
18. september 2007 - 15:47
#60
Hvilket spørgsmål ?
18. september 2007 - 15:51
#61
F.eks. fra 17/09-2007 21:11:18 - men de er måske ikke aktuelle mere?
18. september 2007 - 16:14
#62
Jow... hvis du lige har den med < og > på hånden... For det andet med den første værdi der... den virker nu... virker perfekt... Men har du det andet Pattern der så ville jeg da gerne ha det... :)
18. september 2007 - 17:57
#63
Værsgod: re.Pattern = "<[^>]*>" text = re.Replace(text, "")
18. september 2007 - 18:08
#64
Jeg siger 1.000 tak for hjælpen...
Kurser inden for grundlæggende programmering