Jump to content

If $a Not in $b


shaggy89
 Share

Recommended Posts

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

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)

userbar.png

Link to comment
Share on other sites

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 by shaggy89
Update
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...