Sign in to follow this  
Followers 0
CyberneticSoldier

Optimization tips

7 posts in this topic

#1 ·  Posted (edited)

Hi everyone,

I've made a script that connects with a website and it reads data from there. The problem is that the total time for the script to complete is a few minutes (I don't think it's 5 minutes, but it's getting close to that) and I'd like to speed it up a bit.

I use the script to read my school schedule from the school web page and then convert that data into a .ics file (for use in digital agendas) and then upload that file to a host.

In pseudo code the script goes pretty much like this:

- Enter variables for class and from when to when to get the schedule

- Open up a hidden browser window with _IECreate

-- Loop through classes

--- Loop through weeks (from when to when to get the schedule)

--- Use _IENavigate to surf to the week schedule

--- Read with _IEDocReadHTML

--- Strip the read data of all useless data

--- Format and write to .ics file

-- Upload the file and delete local file after that

- Close IE window

- Exit

Most of the time the script is just waiting for webpages to load (more then 50% of the total time according to AU3Profiler). So I had the idea of opening all webpages in separate browser instances and then do a check to make sure they all loaded, but let's just say ~1200 instances of IE aren't really going to work :D

So I think I'm more or less out of options for optimization, with the exception of uploading all files in one go instead of each class individually.

But I'm hoping someone has an idea to do things differently and hopefully faster, so thanks in advance if you do!

This is the actual code (with my ftp login data removed), I know some includes are not necessary. I was planning on a GUI and stuff, but later on I decided not to do that as I'm only going to run it on my pc. I'll clean those up later :huggles:

#include <IE.au3>
#include <Date.au3>
#include <Array.au3>
#include <GUIConstants.au3>
#include <Misc.au3>

; all classes to get the schedule for
$class = "1GA-1a|1GA-1b|1GA-2a|1GA-2b|1GA-3a|1GA-3b|1GA-4a|1GA-4b|1GA-5a|1GA-5b|1GA-6|1GA-7|2GA-1a|2GA-1b|2GA-2a|2GA-2b|3GA-1a|3GA-1b|3GA-2a|3GA-2b|3GA-3a|3GA-3b|4GA-1A|4GA-1b"
; get the schedule for Fweek until Uweek
$Fweek = 1
$Uweek = 52
; subjects to ignore
$ignore = "FADE1"

; open the browser
$ieObj = _IECreate("http://www.google.com/", 0, 0, 0, 0)
$classes = StringSplit($class, "|")

; loop through classes
For $x = 1 To $classes[0]
    $class = $classes[$x]
    $file = FileOpen(@MyDocumentsDir & "\" & $class & ".ics", 2)

    If $file = -1 Then
        MsgBox(0, "Error", "Unable to open file.")
        Exit
    EndIf

    FileWrite($file, "BEGIN:VCALENDAR" & @CRLF & "VERSION:1.0" & @CRLF)

    ; loop through the weeks and extract the data from the schedule while doing so
    For $i = $Fweek To $Uweek
        $Tarray = GetSchedule($class, $i, $ieObj)
        $date = _DateAdd( 'd',($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Monday"), _ArraySearch($Tarray,"Tuesday"), $date, $file, $ignore)
        $date = _DateAdd( 'd',1+($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Tuesday"), _ArraySearch($Tarray,"Wednesday"), $date, $file, $ignore)
        $date = _DateAdd( 'd',2+($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Wednesday"), _ArraySearch($Tarray,"Thursday"), $date, $file, $ignore)
        $date = _DateAdd( 'd',3+($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Thursday"), _ArraySearch($Tarray,"Friday"), $date, $file, $ignore)
        $date = _DateAdd( 'd',4+($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Friday"), UBound($Tarray)-6, $date, $file, $ignore)
    Next

    FileWrite($file, "END:VCALENDAR")
    FileClose($file)

    ; ftp login information
    $server = '*****'
    $username = '*****'
    $pass = '*****'
    $ftpfolder = '*****'

    ; use ncftp to upload the file to a host server
    $o = RunWait('"ncftpput.exe" -u "' & $username & '" -p "' & $pass & '" "' & $server & '" "' & $ftpfolder & '" "' & @MyDocumentsDir & '\'& $class & '.ics"', "", @SW_HIDE)
    If $o <> 0 Then MsgBox(0,"Error!", "The program encountered an error: " & $o)

    FileDelete(@MyDocumentsDir & "\" & $class & ".ics")
Next

; close browser
_IEQuit($ieObj)

Exit

; here the data is formated and written to the file
Func AddToSchedule($Aarray, $Astart, $Aend, $Adate, $Afile, $Aignore)
    $Bignore = StringSplit($Aignore, "|", 2)
    For $t = $Astart+1 To $Aend Step 6
        $beginTa = StringSplit($Aarray[$t], ":", 2)
        If UBound($beginTa) <> 2 Then ExitLoop
        If StringLen($beginTa[0]) = 1 Then $beginTa[0] = "0"& $beginTa[0]
        If StringLen($beginTa[1]) = 1 Then $beginTa[1] = "0"& $beginTa[1]
        $beginT = StringReplace($Adate, "/", "") & "T" & $beginTa[0] & $beginTa[1] & "00"

        $endTa = StringSplit($Aarray[$t+1], ":", 2)
        If StringLen($endTa[0]) = 1 Then $endTa[0] = "0"& $endTa[0]
        If StringLen($endTa[1]) = 1 Then $endTa[1] = "0"& $endTa[1]
        $endT = StringReplace($Adate, "/", "") & "T" & $endTa[0] & $endTa[1] & "00"

        $subT = $Aarray[$t+2]
        $locT = $Aarray[$t+3]
        $teachT = $Aarray[$t+4]
        $weekT = $Aarray[$t+5]

        For $r = 0 To UBound($Bignore)-1
            If StringInStr($subT, $Bignore[$r]) <> 0 Then ContinueLoop 2
        Next

        FileWrite($Afile, "BEGIN:VEVENT" & @CRLF)
        FileWrite($Afile, "UID:" & Binary($beginT & "-" & $endT & "-" & $locT) & @CRLF)
        FileWrite($Afile, "DTSTART:" & $beginT & @CRLF)
        FileWrite($Afile, "DTEND:" & $endT & @CRLF)
        FileWrite($Afile, "LOCATION;ENCODING=QUOTED-PRINTABLE:" & $locT & @CRLF)
        FileWrite($Afile, "DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" & "Teacher: " & $teachT & " Weeks: " & $weekT & @CRLF)
        FileWrite($Afile, "SUMMARY;ENCODING=QUOTED-PRINTABLE:" & $subT & @CRLF)
        FileWrite($Afile, "END:VEVENT" & @CRLF)
    Next
EndFunc

; here the schedule is extracted from the school website
Func GetSchedule($class, $week, $ieObj)
_IENavigate($ieObj, "http://194.171.178.25:8080/Reporting/Textspreadsheet;Student%20Sets;name;" & $class & "?&weeks=" & $week & "&days=1-5&width=0&height=0", 1)
$text = _IEDocReadHTML($ieObj)
$result = StringInStr($text, "Monday")
$text = StringTrimLeft($text, $result-1)
$result = StringInStr($text, "Tuesday")

$result = StringInStr($text, "<TABLE class=footer-border-args")
$text = StringTrimRight($text, StringLen($text)-$result+1)

$text = StringReplace($text, "</BODY>", "")
$text = StringReplace($text, "</HTML>", "")
$text = StringReplace($text, "<TBODY>", "")
$text = StringReplace($text, "</TBODY>", "")
$text = StringReplace($text, "<SPAN>", "")
$text = StringReplace($text, "</SPAN>", "")
$text = StringReplace($text, "<SPAN class=labelone>", "")
$text = StringReplace($text, "<COLGROUP>", "")
$text = StringReplace($text, "<P>", "")
$text = StringReplace($text, "</P>", "")
$text = StringReplace($text, "<TD>", "")
$text = StringReplace($text, "</TD>", "")
$text = StringReplace($text, "<TR>", "")
$text = StringReplace($text, "</TR>", "")
$text = StringReplace($text, "<TABLE class=spreadsheet border=t cellSpacing=0 cellPadding=2>", "")
$text = StringReplace($text, "</TABLE>", "")
$text = StringReplace($text, "<COL class=column0>", "")
$text = StringReplace($text, "<COL class=column1>", "")
$text = StringReplace($text, "<COL class=column2>", "")
$text = StringReplace($text, "<COL class=column3>", "")
$text = StringReplace($text, "<COL class=column4>", "")
$text = StringReplace($text, "<COL class=column5>", "")
$text = StringReplace($text, "<TR class=columnTitles>", "")
$text = StringReplace($text, "Begin", "")
$text = StringReplace($text, "Eind", "")
$text = StringReplace($text, "Activiteit", "")
$text = StringReplace($text, "Plaats", "")
$text = StringReplace($text, "Docent(en)", "")
$text = StringReplace($text, "Kalenderweken", "")

$text = StringStripWS($text,4)

$Tarray = StringSplit($text, @CR, 2)
Return $Tarray
EndFunc

Again if anyone has ideas to speed this up a bit I'd like to hear, thanks in advance! :

ps: just typing this gave me a good idea, somehow reduce the number of weeks I need to get from the site. That should speed things up a bit.

Other suggestions are still welcome though :D

Edited by CyberneticSoldier

Share this post


Link to post
Share on other sites



Try using _InetGetSource instead of navigating to the website and using _IEDocReadHTML. That will be much faster.


[font="Verdana"] [size="2"]"[/size][/font]Failure is not an option -- it comes packaged with Windows"[font="Verdana"][size="2"] Gecko Web Browser[/size][/font][font="Verdana"][size="2"], [/size][/font][font="Verdana"][size="2"]Yahtzee![/size][/font][font="Verdana"][size="2"], Toolbar Launcher (like RocketDock)[/size][/font][font="Verdana"][size="2"]Internet Blocker, Simple Calculator, Local Weather, Easy GDI+ GUI [/size][/font][font="Verdana"][size="2"]Triangle Solver, TCP File Transfer, [/size][/font][font="Verdana"][size="2"]Valuater's Autoit Wrappers[/size][/font][font="Verdana"][size="3"][size="2"][size="2"]OOP In AutoIt[/size][/size][/size][/font][font="Verdana"][size="2"][size="1"]Using Windows XP SP3, 1GB RAM, AMD Athlon Processor @ 2.1 GHzCheck me out at gadgets.freehostrocket.com[/size][/size][/font]

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Thanks dantay9 :D It does seem a lot faster now. But now I have to change the "strip useless stuff" part again because _InetGetSource returns things differently (I don't know why, but there seems to be much less code on the webpage or it's formatted very differently).

Well I changed the code a bit:

#include <Date.au3>
#include <Array.au3>
#include <INet.au3>

$class = "1GA-1a|1GA-1b|1GA-2a|1GA-2b|1GA-3a|1GA-3b|1GA-4a|1GA-4b|1GA-5a|1GA-5b|1GA-6|1GA-7|2GA-1a|2GA-1b|2GA-2a|2GA-2b|3GA-1a|3GA-1b|3GA-2a|3GA-2b|3GA-3a|3GA-3b|4GA-1A|4GA-1b"
$Fweek = 3
$Uweek = 52
$ignore = "FADE1"

$classes = StringSplit($class, "|")

For $x = 1 To $classes[0]
    $class = $classes[$x]
    $file = FileOpen(@MyDocumentsDir & "\" & $class & ".ics", 2)

    If $file = -1 Then
        MsgBox(0, "Error", "Unable to open file.")
        Exit
    EndIf

    FileWrite($file, "BEGIN:VCALENDAR" & @CRLF & "VERSION:1.0" & @CRLF)

    For $i = $Fweek To $Uweek
        $Tarray = GetSchedule($class, $i)
        $date = _DateAdd( 'd',($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Monday"), _ArraySearch($Tarray,"Tuesday"), $date, $file, $ignore)
        $date = _DateAdd( 'd',1+($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Tuesday"), _ArraySearch($Tarray,"Wednesday"), $date, $file, $ignore)
        $date = _DateAdd( 'd',2+($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Wednesday"), _ArraySearch($Tarray,"Thursday"), $date, $file, $ignore)
        $date = _DateAdd( 'd',3+($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Thursday"), _ArraySearch($Tarray,"Friday"), $date, $file, $ignore)
        $date = _DateAdd( 'd',4+($i-5)*7, "2009/09/07")
        AddToSchedule($Tarray, _ArraySearch($Tarray,"Friday"), UBound($Tarray)-6, $date, $file, $ignore)
    Next

    FileWrite($file, "END:VCALENDAR")
    FileClose($file)
Next

$server = '****'
$username = '****'
$pass = '****'
$ftpfolder = '****'
$upload = ""

For $x = 1 To $classes[0]
    $class = $classes[$x]
    $upload = $upload & '"' & @MyDocumentsDir & '\'& $class & '.ics" '
Next

$o = RunWait('"ncftpput.exe" -u "' & $username & '" -p "' & $pass & '" "' & $server & '" "' & $ftpfolder & '" ' & $upload, "", @SW_HIDE)
If $o <> 0 Then MsgBox(0,"Error!", "The program encountered an error: " & $o)

For $x = 1 To $classes[0]
    $class = $classes[$x]
    FileDelete(@MyDocumentsDir & "\" & $class & ".ics")
Next

Exit

Func AddToSchedule($Aarray, $Astart, $Aend, $Adate, $Afile, $Aignore)
    $Bignore = StringSplit($Aignore, "|", 2)
    For $t = $Astart+1 To $Aend Step 6
        $beginTa = StringSplit($Aarray[$t], ":", 2)
        If UBound($beginTa) <> 2 Then ExitLoop
        If StringLen($beginTa[0]) = 1 Then $beginTa[0] = "0"& $beginTa[0]
        If StringLen($beginTa[1]) = 1 Then $beginTa[1] = "0"& $beginTa[1]
        $beginT = StringReplace($Adate, "/", "") & "T" & $beginTa[0] & $beginTa[1] & "00"

        $endTa = StringSplit($Aarray[$t+1], ":", 2)
        If StringLen($endTa[0]) = 1 Then $endTa[0] = "0"& $endTa[0]
        If StringLen($endTa[1]) = 1 Then $endTa[1] = "0"& $endTa[1]
        $endT = StringReplace($Adate, "/", "") & "T" & $endTa[0] & $endTa[1] & "00"

        $subT = $Aarray[$t+2]
        $locT = $Aarray[$t+3]
        $teachT = $Aarray[$t+4]
        $weekT = $Aarray[$t+5]

        For $r = 0 To UBound($Bignore)-1
            If StringInStr($subT, $Bignore[$r]) <> 0 Then ContinueLoop 2
        Next

        FileWrite($Afile, "BEGIN:VEVENT" & @CRLF)
        FileWrite($Afile, "UID:" & Binary($beginT & "-" & $endT & "-" & $locT) & @CRLF)
        FileWrite($Afile, "DTSTART:" & $beginT & @CRLF)
        FileWrite($Afile, "DTEND:" & $endT & @CRLF)
        FileWrite($Afile, "LOCATION;ENCODING=QUOTED-PRINTABLE:" & $locT & @CRLF)
        FileWrite($Afile, "DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" & "Teacher: " & $teachT & " Weeks: " & $weekT & @CRLF)
        FileWrite($Afile, "SUMMARY;ENCODING=QUOTED-PRINTABLE:" & $subT & @CRLF)
        FileWrite($Afile, "END:VEVENT" & @CRLF)
    Next
EndFunc

Func GetSchedule($class, $week)
$text = _InetGetSource("http://194.171.178.25:8080/Reporting/Textspreadsheet;Student%20Sets;name;" & $class & "?&weeks=" & $week & "&days=1-5&width=0&height=0")
$result = StringInStr($text, "Monday")
$text = StringTrimLeft($text, $result-1)
$result = StringInStr($text, "Friday")

$result = StringInStr($text, "<table",0,2,$result)
$text = StringTrimRight($text, StringLen($text)-$result+1)

While 1
    $result = StringInStr($text, "<")
    $result2 = StringInStr($text, ">",0,1,$result)
    If $result == 0 Then ExitLoop
    $text = StringReplace($text,StringMid($text,$result,$result2-$result+1),"")
WEnd

$text = StringReplace($text, "Begin", "")
$text = StringReplace($text, "Eind", "")
$text = StringReplace($text, "Activiteit", "")
$text = StringReplace($text, "Plaats", "")
$text = StringReplace($text, "Docent(en)", "")
$text = StringReplace($text, "Kalenderweken", "")

$text = StringStripWS($text,4)
$Tarray = StringSplit($text, @CR, 2)
Return $Tarray
EndFunc

According to AU3Profiler most of the time is now in the GetSchedule function and in the upload. Appearently _InetGetSource takes almost no time at all, but I can't really imagine that all the string functions in GetSchedule take more time then _InetGetSource... and if they do I don't think I can optimize much there. I guess I'll try to find a way to limit the number of weeks down to something reasonable, as the amount of those seem to be pretty much the only area I can optimize now.

btw, I also got a pm from someone that says it might be a good idea to ask my school to provide this service. That thought also crossed my mind, but as the ICT department is taking ages to act on even the simplest of problems I can only expect this to take even longer as it's not even a real problem. I will ask the ICT department at school, but I'm not going to expect them to have this service soon, so for now my service will at least serve as a temporary solution.

Edited by CyberneticSoldier

Share this post


Link to post
Share on other sites

Well in the search of more speed I decided to try some simple multi threading/tasking/whatever. So I split the script up into two parts. A master script and a child script.

The master script initializes the child script a number of times (equal to the amount of classes) and after that uploads the schedules and deletes them locally.

The child script gets the schedule for a single class and stores it locally.

The master script:

TraySetToolTip("Preparing variables...")

$class = "1GA-1a|1GA-1b|1GA-2a|1GA-2b|1GA-3a|1GA-3b|1GA-4a|1GA-4b|1GA-5a|1GA-5b|1GA-6|1GA-7|2GA-1a|2GA-1b|2GA-2a|2GA-2b|3GA-1a|3GA-1b|3GA-2a|3GA-2b|3GA-3a|3GA-3b|4GA-1A|4GA-1b"
$Fweek = 3
$Uweek = 52
$ignore = "FADE1"

$classes = StringSplit($class, "|")

TraySetToolTip("Variables prepared, start retrieving schedules.")

For $i = 1 to $classes[0]
    Run('NHTV_rooster_get.exe ' & $classes[$i] & ' ' & $Fweek & ' ' & $Uweek & ' ' & $ignore)
Next

TraySetToolTip("Schedule retrieving started.")

While 1
    $q = 0
    For $x = 1 To $classes[0]
        $class = $classes[$x]
        If FileExists(@MyDocumentsDir & "\" & $class & ".ics") Then $q = $q + 1
    Next
    If $q = $classes[0] Then ExitLoop
    TraySetToolTip(Round(100/$classes[0]*$q) & "% of schedules retrieved.")
WEnd

TraySetToolTip("All schedules retrieved, starting upload.")

$server = '*****'
$username = '*****'
$pass = '*****'
$ftpfolder = '*****'
$upload = ""

For $x = 1 To $classes[0]
    $class = $classes[$x]
    $upload = $upload & '"' & @MyDocumentsDir & '\'& $class & '.ics" '
Next

TraySetToolTip("Uploading...")

$o = RunWait('"ncftpput.exe" -u "' & $username & '" -p "' & $pass & '" "' & $server & '" "' & $ftpfolder & '" ' & $upload, "", @SW_HIDE)
If $o <> 0 Then MsgBox(0,"Error!", "The program encountered an error: " & $o)

TraySetToolTip("Upload done, removing local files.")

For $x = 1 To $classes[0]
    $class = $classes[$x]
    FileDelete(@MyDocumentsDir & "\" & $class & ".ics")
Next

TraySetToolTip("Local files removed, shutting down.")
Exit

The child script (build and named: NHTV_rooster_get.exe):

#NoTrayIcon
#include <Date.au3>
#include <Array.au3>
#include <INet.au3>

$data = StringSplit($CmdLineRaw, ' ', 1)

$class = $data[1]
$Fweek = $data[2]
$Uweek = $data[3]
$ignore = $data[4]

$file = FileOpen(@MyDocumentsDir & "\" & $class & "._temp", 2)

If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

FileWrite($file, "BEGIN:VCALENDAR" & @CRLF & "VERSION:1.0" & @CRLF)

For $i = $Fweek To $Uweek
    $Tarray = GetSchedule($class, $i)
    $date = _DateAdd( 'd',($i-5)*7, "2009/09/07")
    AddToSchedule($Tarray, _ArraySearch($Tarray,"Monday"), _ArraySearch($Tarray,"Tuesday"), $date, $file, $ignore)
    $date = _DateAdd( 'd',1+($i-5)*7, "2009/09/07")
    AddToSchedule($Tarray, _ArraySearch($Tarray,"Tuesday"), _ArraySearch($Tarray,"Wednesday"), $date, $file, $ignore)
    $date = _DateAdd( 'd',2+($i-5)*7, "2009/09/07")
    AddToSchedule($Tarray, _ArraySearch($Tarray,"Wednesday"), _ArraySearch($Tarray,"Thursday"), $date, $file, $ignore)
    $date = _DateAdd( 'd',3+($i-5)*7, "2009/09/07")
    AddToSchedule($Tarray, _ArraySearch($Tarray,"Thursday"), _ArraySearch($Tarray,"Friday"), $date, $file, $ignore)
    $date = _DateAdd( 'd',4+($i-5)*7, "2009/09/07")
    AddToSchedule($Tarray, _ArraySearch($Tarray,"Friday"), UBound($Tarray)-6, $date, $file, $ignore)
Next

FileWrite($file, "END:VCALENDAR")
FileClose($file)

FileMove(@MyDocumentsDir & "\" & $class & "._temp", @MyDocumentsDir & "\" & $class & ".ics", 1)

Exit

Func AddToSchedule($Aarray, $Astart, $Aend, $Adate, $Afile, $Aignore)
    $Bignore = StringSplit($Aignore, "|", 2)
    For $t = $Astart+1 To $Aend Step 6
        $beginTa = StringSplit($Aarray[$t], ":", 2)
        If UBound($beginTa) <> 2 Then ExitLoop
        If StringLen($beginTa[0]) = 1 Then $beginTa[0] = "0"& $beginTa[0]
        If StringLen($beginTa[1]) = 1 Then $beginTa[1] = "0"& $beginTa[1]
        $beginT = StringReplace($Adate, "/", "") & "T" & $beginTa[0] & $beginTa[1] & "00"

        $endTa = StringSplit($Aarray[$t+1], ":", 2)
        If StringLen($endTa[0]) = 1 Then $endTa[0] = "0"& $endTa[0]
        If StringLen($endTa[1]) = 1 Then $endTa[1] = "0"& $endTa[1]
        $endT = StringReplace($Adate, "/", "") & "T" & $endTa[0] & $endTa[1] & "00"

        $subT = $Aarray[$t+2]
        $locT = $Aarray[$t+3]
        $teachT = $Aarray[$t+4]
        $weekT = $Aarray[$t+5]

        For $r = 0 To UBound($Bignore)-1
            If StringInStr($subT, $Bignore[$r]) <> 0 Then ContinueLoop 2
        Next

        FileWrite($Afile, "BEGIN:VEVENT" & @CRLF)
        FileWrite($Afile, "UID:" & Binary($beginT & "-" & $endT & "-" & $locT) & @CRLF)
        FileWrite($Afile, "DTSTART:" & $beginT & @CRLF)
        FileWrite($Afile, "DTEND:" & $endT & @CRLF)
        FileWrite($Afile, "LOCATION;ENCODING=QUOTED-PRINTABLE:" & $locT & @CRLF)
        FileWrite($Afile, "DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" & "Teacher: " & $teachT & " Weeks: " & $weekT & @CRLF)
        FileWrite($Afile, "SUMMARY;ENCODING=QUOTED-PRINTABLE:" & $subT & @CRLF)
        FileWrite($Afile, "END:VEVENT" & @CRLF)
    Next
EndFunc

Func GetSchedule($class, $week)
$text = _InetGetSource("http://194.171.178.25:8080/Reporting/Textspreadsheet;Student%20Sets;name;" & $class & "?&weeks=" & $week & "&days=1-5&width=0&height=0")
$result = StringInStr($text, "Monday")
$text = StringTrimLeft($text, $result-1)
$result = StringInStr($text, "Friday")

$result = StringInStr($text, "<table",0,2,$result)
$text = StringTrimRight($text, StringLen($text)-$result+1)

While 1
    $result = StringInStr($text, "<")
    $result2 = StringInStr($text, ">",0,1,$result)
    If $result == 0 Then ExitLoop
    $text = StringReplace($text,StringMid($text,$result,$result2-$result+1),"")
WEnd

$text = StringReplace($text, "Begin", "")
$text = StringReplace($text, "Eind", "")
$text = StringReplace($text, "Activiteit", "")
$text = StringReplace($text, "Plaats", "")
$text = StringReplace($text, "Docent(en)", "")
$text = StringReplace($text, "Kalenderweken", "")

$text = StringStripWS($text,4)
$Tarray = StringSplit($text, @CR, 2)
Return $Tarray
EndFunc

Just for comparison, this takes slightly less then one minute to execute. The previous version still took a few minutes to complete.

I'm too lazy to do the week limiting thing, as for some reason school weeks are not the same as calendar weeks (at least in the schedule they're not). So I would have to figure out the offset between the calendar weeks and the school weeks and use that to figure it all out. Waaaaaaay too much work. And now I really don't think it'll get much faster. Maybe I can get it down to half a minute by limiting the weeks, but that just doesn't seem worth the trouble.

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

The only way I can see your script getting any faster is by starting the upload with FTP while some of the NHTV_rooster_get.exe programs are still running.

Edit: Why don't you put the responsibility of uploading on the child processes. That way they can start as soon as there is a file ready for uploading .. Or are you not allowed to open multiple connections?

Edited by Manadar

Share this post


Link to post
Share on other sites

I'm not sure if I'm allowed to open multiple connections, but I should be able to figure that out. But looking at the child scripts it seems they are done at pretty much the same time.

I'll check out if I'm allowed to have multiple connections and if so I'll put the upload in the child :D Thanks for the tip :huggles:

Share this post


Link to post
Share on other sites

So how exactly can I open multiple connections when uploading a file to a FTP server using AutoIt?

Share this post


Link to post
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
Sign in to follow this  
Followers 0