Är det "eMail" du vill flagga för att få ut e-post? eller är det bara e-post mönstret?
RegExp känns som det självklara valet i så fall.
10 svar · 586 visningar · startad av Quid
Hej, jag har en tabell i en databas som innehåller en massa text, t.ex.
<DWUser version="5.1.0.1" uid="18" oid="1" dw4uid="ROBERT" guid="c9c37de3-a7cc-4c22-b996-8e90b63ec89d" oguid="effbdb06-e9d5-437e-80d7-fd79577b5b33" name="robert" active="true" eMail="robert@domän.se" distribution="NetworkStartup" oldIniSettingsForDw="[3610844937Basket]
DISPLAYMODE=0
[leverant_12809116.169_RESULT]
COLFIXED=1
COLUMNWIDTHS=00173000340004000069000630009700083
[Kundfakt_12833897.778_RESULT]
COLFIXED=0
COLUMNWIDTHS=000830009200065000650002100048000380004200042
[5822078DW5WASTE]
DISPLAYMODE=0
" oldIniSettingsForViewer="[Dacs4]
Color=002550025500000
TextColor=002550000000000
FontSize=20
LineSize=5
MerkerSize=50
LastOCRSetting=
LastBarcodeSetting=
FontBold=400
FontItalic=0
" securityLevel="Normal"></DWUser>
Jag vill bara ha ut själva epostadressen, i detta fallet <robert@domän.se>, men den kan variera ifrån post till post.
Hur löser jag det?
Är det "eMail" du vill flagga för att få ut e-post? eller är det bara e-post mönstret?
RegExp känns som det självklara valet i så fall.
Det där ser ut som en del ur ett XML-dokument.
Om så är fallet så kan du läsa attributen med XMLDOM istället. :)
voigtann1 skrev:
Är det "eMail" du vill flagga för att få ut e-post? eller är det bara e-post mönstret?
RegExp känns som det självklara valet i så fall.
Det kommer alltid att stå eMail framför adressen som jag vill ha ut.
Troxy skrev:
Det där ser ut som en del ur ett XML-dokument.
Om så är fallet så kan du läsa attributen med XMLDOM istället. :)
Ja, det är en del av ett XML-dokument som är lagrat i en databas, men det måste läsas ifrån databasen.
Quid skrev:
Ja, det är en del av ett XML-dokument som är lagrat i en databas, men det måste läsas ifrån databasen.
Är det ett giltigt XML-dokument i sin helhet?
Isf, läs dokumentet med Microsoft.XMLDOM, hämta attributet med XPath.
Set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.LoadXML(data)
xml.SetProperty("SelectionLanguage", "XPath")
attr = xml.SelectNodes(xpath)
Just XPath-biten är jag dålig på :p
voigtann1: Uttrycker sig, så känns regexp som det naturliga valet i detta..
Men mönster.. det är inte min grej.
Inte min heller :)
<%
Response.Write GetValue(Str, "guid")
Function GetValue(str, target)
With New RegExp
.Global = True
.IgnoreCase = True
.Pattern = target & "=""([^""]+)"""
Dim m, match
set m = .Execute(str)
For each match in m
GetValue = match.SubMatches(0)
Next
End With
End Function
%>
Med din sträng ovan får jag ut resultatet:
c9c37de3-a7cc-4c22-b996-8e90b63ec89deffbdb06-e9d5-437e-80d7-fd79577b5b33
behöver kanske inte köra for each loop men it works ;)
Klockrent, tack.
Orkar du förklara hur det funkar?
Själv skrev jag ihop en annan lösning, som funkar, men den känns inte lika snygg :)
v_split = Split(v_string," ")
For Each item In v_split
IF lcase(left(item, 5)) = "email" THEN
v_strip = Replace(item, "eMail=", "")
v_strip = Left(v_strip, (Len(v_strip) -1))
v_strip = Right(v_strip, (Len(v_strip) -1))
v_email = v_strip
END IF
Next
RegExp mönstret letar efter (i mitt exempel) efter ett uttryck:
guid="([^"]+)"
Vi skapar en grupp () för att kunna få ut datan ifrån vad det nu är för data
[^"]+ = Träffa allt som INTE är " mellan en träff till hur många träffar den kan hitta (greedy)
För varje träff vi hitta (regExp.execute) så hämtar vi ut gruppen 1 (i arrayn är det 0)
GetValue = match.SubMatches(0)