Gotta be a cleaner way

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
Rishu0182
Posts: 33
Joined: 02 Feb 2017, 11:49

Gotta be a cleaner way

22 Aug 2018, 12:13

Hello,

Below is a code I use to search through some tables on a website and pull an email and phone number. It works perfectly, however it is long and sloppy. Can someone with more experience than myself show me how this could be cleaned up and made simpler? Thanks!!!!

Code: Select all

#Persistent
ESC::Reload

F1::
pwb := WBGet()
A1 =
A2 =
A3 =
A4 =
A5 =
A6 =
A7 =
A8 =
A9 =
A10 =
A11 =
A12 =
A13 =
A14 =
A15 =
A16 =
A17 =
A18 =
A19 =
A20 =
EMAIL =
PHONE =
Try
{
A1:=pwb.document.GetElementsByTagName("TD")[14].InnerText
A2:=pwb.document.GetElementsByTagName("TD")[20].InnerText
A3:=pwb.document.GetElementsByTagName("TD")[26].InnerText
A4:=pwb.document.GetElementsByTagName("TD")[32].InnerText
A5:=pwb.document.GetElementsByTagName("TD")[38].InnerText
A6:=pwb.document.GetElementsByTagName("TD")[44].InnerText
A7:=pwb.document.GetElementsByTagName("TD")[50].InnerText
A8:=pwb.document.GetElementsByTagName("TD")[56].InnerText
A9:=pwb.document.GetElementsByTagName("TD")[62].InnerText
A10:=pwb.document.GetElementsByTagName("TD")[68].InnerText
A11:=pwb.document.GetElementsByTagName("TD")[74].InnerText
A12:=pwb.document.GetElementsByTagName("TD")[80].InnerText
A13:=pwb.document.GetElementsByTagName("TD")[86].InnerText
A14:=pwb.document.GetElementsByTagName("TD")[92].InnerText
A15:=pwb.document.GetElementsByTagName("TD")[98].InnerText
}
IfInString, A1, E-mail:
{
Array := StrSplit(A1,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A2, E-mail:
{
Array := StrSplit(A2,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A3, E-mail:
{
Array := StrSplit(A3,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A4, E-mail:
{
Array := StrSplit(A4,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A5, E-mail:
{
Array := StrSplit(A5,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A6, E-mail:
{
Array := StrSplit(A6,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A7, E-mail:
{
Array := StrSplit(A7,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A8, E-mail:
{
Array := StrSplit(A8,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A9, E-mail:
{
Array := StrSplit(A9,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A10, E-mail:
{
Array := StrSplit(A10,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A11, E-mail:
{
Array := StrSplit(A11,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A12, E-mail:
{
Array := StrSplit(A12,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A13, E-mail:
{
Array := StrSplit(A13,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A14, E-mail:
{
Array := StrSplit(A14,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
IfInString, A15, E-mail:
{
Array := StrSplit(A15,"//","//")
If Array[5] contains Email
{
Phone .= Array[4]
Email .= Array[5]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[4] contains Email
{
Phone .= Array[3]
Email .= Array[4]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
If Array[3] contains Email
{
Phone .= Array[2]
Email .= Array[3]
StringReplace, Email, Email, E-mail:,,All
StringReplace, Phone, Phone, Phone Number:,,All
StringTrimLeft,Email,Email, 1
StringTrimRight,Email,Email, 1
MsgBox %Email% %Phone%
Return
}
}
Msgbox FAIL!!
Return


;************Pointer to Open IE Window******************
WBGet(WinTitle="ahk_class IEFrame", Svr#=1) {               ;// based on ComObjQuery docs
   static msg := DllCall("RegisterWindowMessage", "str", "WM_HTML_GETOBJECT")
        , IID := "{0002DF05-0000-0000-C000-000000000046}"   ;// IID_IWebBrowserApp
;//     , IID := "{332C4427-26CB-11D0-B483-00C04FD90119}"   ;// IID_IHTMLWindow2
   SendMessage msg, 0, 0, Internet Explorer_Server%Svr#%, %WinTitle%

   if (ErrorLevel != "FAIL") {
      lResult:=ErrorLevel, VarSetCapacity(GUID,16,0)
      if DllCall("ole32\CLSIDFromString", "wstr","{332C4425-26CB-11D0-B483-00C04FD90119}", "ptr",&GUID) >= 0 {
         DllCall("oleacc\ObjectFromLresult", "ptr",lResult, "ptr",&GUID, "ptr",0, "ptr*",pdoc)
         return ComObj(9,ComObjQuery(pdoc,IID,IID),1), ObjRelease(pdoc)
      }
   }
}
User avatar
FanaticGuru
Posts: 1906
Joined: 30 Sep 2013, 22:25

Re: Gotta be a cleaner way

22 Aug 2018, 12:46

Rishu0182 wrote:Can someone with more experience than myself show me how this could be cleaned up and made simpler?
I don't have the interest to go through all the code but you need to use some various loops, maybe some subroutines or functions.

Here is an example:

Code: Select all

;~ A1:=pwb.document.GetElementsByTagName("TD")[14].InnerText
;~ A2:=pwb.document.GetElementsByTagName("TD")[20].InnerText
;~ A3:=pwb.document.GetElementsByTagName("TD")[26].InnerText
;~ A4:=pwb.document.GetElementsByTagName("TD")[32].InnerText
;~ A5:=pwb.document.GetElementsByTagName("TD")[38].InnerText
;~ A6:=pwb.document.GetElementsByTagName("TD")[44].InnerText
;~ A7:=pwb.document.GetElementsByTagName("TD")[50].InnerText
;~ A8:=pwb.document.GetElementsByTagName("TD")[56].InnerText
;~ A9:=pwb.document.GetElementsByTagName("TD")[62].InnerText
;~ A10:=pwb.document.GetElementsByTagName("TD")[68].InnerText
;~ A11:=pwb.document.GetElementsByTagName("TD")[74].InnerText
;~ A12:=pwb.document.GetElementsByTagName("TD")[80].InnerText
;~ A13:=pwb.document.GetElementsByTagName("TD")[86].InnerText
;~ A14:=pwb.document.GetElementsByTagName("TD")[92].InnerText
;~ A15:=pwb.document.GetElementsByTagName("TD")[98].InnerText

; Loop to do similar to above
A := {}
Loop 15
	try
		A.Push(pwb.document.GetElementsByTagName("TD")[A_Index*6+8].InnerText)
This should put the InnerText in a true array as opposed to a pseudo array.

FG
Hotkey Help - Help Dialog for Currently Running AHK Scripts
AHK Startup - Consolidate Multiply AHK Scripts with one Tray Icon
Hotstring Manager - Create and Manage Hotstrings
[Class] WinHook - Create Window Shell Hooks and Window Event Hooks
swagfag
Posts: 6222
Joined: 11 Jan 2017, 17:59

Re: Gotta be a cleaner way

22 Aug 2018, 13:12

Code: Select all

#Persistent
ESC::Reload

F1::
   pwb := WBGet()

   try
      ElementsTD := pwb.document.GetElementsByTagName("TD")

   InnerTextArray := []
   Loop % 15
   {
      try
      {
         i := 8 + 6 * A_Index
         InnerTextArray.Push(ElementsTD[i].innerText)
      }
   }

   for each, InnerText in InnerTextArray
   {
      if InStr(InnerText, "E-mail:")
      {
         SplitText := StrSplit(InnerText, "//", "//")

         Loop % 3
         {
            i := 6 - A_Index

            if (SplitText[i] ~= "Email")
            {
               Phone .= SplitText[i - 1]
               Phone := StrReplace(Phone, "Phone Number:")

               Email .= SplitText[i]
               Email := SubStr(StrReplace(Email, "E-mail:"), 2, -1) 

               MsgBox % Email " " Phone
               return
            }
         }
      }
   }

   Msgbox FAIL!!
Return

;************Pointer to Open IE Window******************
WBGet(WinTitle="ahk_class IEFrame", Svr#=1) {               ;// based on ComObjQuery docs
   static msg := DllCall("RegisterWindowMessage", "str", "WM_HTML_GETOBJECT")
   , IID := "{0002DF05-0000-0000-C000-000000000046}"   ;// IID_IWebBrowserApp
   ;//     , IID := "{332C4427-26CB-11D0-B483-00C04FD90119}"   ;// IID_IHTMLWindow2
   SendMessage msg, 0, 0, Internet Explorer_Server%Svr#%, %WinTitle%

   if (ErrorLevel != "FAIL") {
      lResult:=ErrorLevel, VarSetCapacity(GUID,16,0)
      if DllCall("ole32\CLSIDFromString", "wstr","{332C4425-26CB-11D0-B483-00C04FD90119}", "ptr",&GUID) >= 0 {
         DllCall("oleacc\ObjectFromLresult", "ptr",lResult, "ptr",&GUID, "ptr",0, "ptr*",pdoc)
         return ComObj(9,ComObjQuery(pdoc,IID,IID),1), ObjRelease(pdoc)
      }
   }
}
Rishu0182
Posts: 33
Joined: 02 Feb 2017, 11:49

Re: Gotta be a cleaner way

24 Aug 2018, 13:05

Thank you again Swag. I will try to work more on arrays so that I don't need so much help.

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: No registered users and 267 guests