shaggy89 Posted February 26, 2016 Share Posted February 26, 2016 Hi all, I'm looking for some help to finish my last bit of code. So far my code scrapes an XML from a webpage and then sends and email on a trigger but what i need to do is find a way to see if a string is in the XML. example Global $Site = IniRead("settings.ini", "Site", "web", "") ;============================================================ while 1 if @HOUR >= 05 and @HOUR <= 18 then $sXML = BinaryToString(InetRead($Site)) $Day = StringRegExpReplace($sXML, '(?is).*<availability.*?day="([^"]+).*</availability.*', '$1') $4WD = StringRegExpReplace($sXML, '(?is).*?<members.*? name="4WD Operations".*?day="([^"]+).*</members.*', '$1') $ARS = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Advance Rescue Shorting".*?day="([^"]+).*</members.*', '$1') $ART = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Advanced Rescue Tools Equipment".*?day="([^"]+).*</members.*', '$1') $ASO = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Air Search Observer".*?day="([^"]+).*</members.*', '$1') check("Day Crew", $day) check("4WD Operations",$4WD) check("Advance Rescue Shorting",$ARS) check("Advanced Rescue Tools Equipment",$ART) check("Air Search Observer",$ASO) sleep(3000000) ; Sleep for 50 mins cause the extra 10 mins is outside of the if EndIf WEnd func check($Class, $ScrapeValue) $Num = IniRead("settings.ini", "Numbers", $class, "") if $Num == 0 Then EndIf if $ScrapeValue < $Num then box($class, $ScrapeValue, $Num) EndFunc func box ($class, $ScrapeValue, $Num) MsgBox(6,"test", $class & $ScrapeValue &$Num ) EndFunc So right now if I open the settings.ini and made day = 2 and the XML site has day as 1 the message box shows message. (great) But if <members.*? name="4WD Operations".*?day="([^"]+).*</members is not in the XML is shows the whole XML. So i need a way to do a if $class not in $sXML skip else keep running script Global $Site = IniRead("settings.ini", "Site", "web", "") ;============================================================ while 1 if @HOUR >= 05 and @HOUR <= 18 then $sXML = BinaryToString(InetRead($Site)) $Day = StringRegExpReplace($sXML, '(?is).*<availability.*?day="([^"]+).*</availability.*', '$1') $4WD = StringRegExpReplace($sXML, '(?is).*?<members.*? name="4WD Operations".*?day="([^"]+).*</members.*', '$1') $ARS = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Advance Rescue Shorting".*?day="([^"]+).*</members.*', '$1') $ART = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Advanced Rescue Tools Equipment".*?day="([^"]+).*</members.*', '$1') $ASO = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Air Search Observer".*?day="([^"]+).*</members.*', '$1') check("Day Crew", $day) check("4WD Operations",$4WD) check("Advance Rescue Shorting",$ARS) check("Advanced Rescue Tools Equipment",$ART) check("Air Search Observer",$ASO) sleep(3000000) ; Sleep for 50 mins cause the extra 10 mins is outside of the if EndIf WEnd func check($Class, $ScrapeValue) $Num = IniRead("settings.ini", "Numbers", $class, "") if $Num == 0 Then EndIf if $Class Not In $sXML ; At this point I need to see if the Class is in the XML if its not skip EndIf ElseIf $ScrapeValue < $Num then box($class, $ScrapeValue, $Num) EndFunc func box ($class, $ScrapeValue, $Num) MsgBox(6,"test", $class & $ScrapeValue &$Num ) EndFunc any ideas ? Link to comment Share on other sites More sharing options...
TheSaint Posted February 26, 2016 Share Posted February 26, 2016 You could just use one of the XML UDF's here and do things directly or you could just check for each element first with the StringInStr command ... provided there is a unique element that can be relied upon. Another way, is to use StringSplit a few times, having divided up your XML read into lines, and weeding out what is not wanted, reducing the XML as you go. Make sure brain is in gear before opening mouth! Remember, what is not said, can be just as important as what is said. Spoiler What is the Secret Key? Life is like a Donut If I put effort into communication, I expect you to read properly & fully, or just not comment. Ignoring those who try to divert conversation with irrelevancies. If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it. I'm only big and bad, to those who have an over-active imagination. I may have the Artistic Liesense to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage) Link to comment Share on other sites More sharing options...
shaggy89 Posted February 26, 2016 Author Share Posted February 26, 2016 (edited) So I have tried using StringInStr and have made a bit of progress. If I change code to this Global $Site = IniRead("settings.ini", "Site", "web", "") ;============================================================ while 1 if @HOUR >= 05 and @HOUR <= 18 then $sXML = BinaryToString(InetRead($Site)) $Day = StringRegExpReplace($sXML, '(?is).*<availability.*?day="([^"]+).*</availability.*', '$1') $4WD = StringRegExpReplace($sXML, '(?is).*?<members.*? name="4WD Operations".*?day="([^"]+).*</members.*', '$1') $ARS = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Advance Rescue Shorting".*?day="([^"]+).*</members.*', '$1') $ART = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Advanced Rescue Tools Equipment".*?day="([^"]+).*</members.*', '$1') $ASO = StringRegExpReplace($sXML, '(?is).*?<members.*? name="Air Search Observer".*?day="([^"]+).*</members.*', '$1') $Day = StringInStr($sXML, $Day) check("Day Crew", $Day) ;=======REST OF CODE=========== nothing happens (knowing there is 3 "day" available and requirement set to 8) just skips to the next one instead of box being displayed. On the other hand it does skip if the $ is not in the XML. UPDATE: So i have used StringInString as suggested but now my next issue. In my heck function I've added my StingInString right now I've got it to EXIT if $vay = 0 how can i do it that if $vay = 0 then skip and check the next $class ? func check($Class, $ScrapeValue) $vay = StringInStr($sXML, $Class) if $vay = 0 Then Exit ;Need to add some sort of skip $Num = IniRead("settings.ini", "Numbers", $class, "") if $ScrapeValue < $Num then box($class, $ScrapeValue, $Num, $vay) EndFunc func box ($class, $ScrapeValue, $Num, $vay) MsgBox(1,"test", $class & $ScrapeValue &$Num ) EndFunc Edited February 28, 2016 by shaggy89 Update Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now