10 posts in this topic
I am fairly new to AutoIT and I am still trying to learn, I have been using _FileListToArray to list all the files with a particular extension in an array and then loop through it for operation ( For $i = 1 To UBound($FileArray) - 1).
So far this has been working fine. But I am not able to figure out a problem that I have; what if I have 50 files but I only want to loop through first 10 files and then next ten and so on? Or rather I should say, how I can I only feed max 10 files to the array at a time when I do _FileListToArray regardless of the total number of files in the folder?
Any insight/help will be much appreciated
Edit: Just realised this was posted in the wrong forum! I guess the Mods will move it to either "AutoIt General Help and Support" or "AutoIt Technical Discussion".
Do you use type checking? Or do you choose not to type check?
I was trying to think of the simplest way to do a type check without typing arguments more than once and I came up with:
Func displayPerson($firstName, $lastName, $age) ; -- TYPE CHECK -- Local $typeCheck = ("" _ & IsString($firstName) _ & IsString($lastName) _ & IsNumber($age) _ ) If (StringInStr($typeCheck, "0")) Then MsgBox(16, "Type Error: displayPerson()", $typeCheck) ; -- FUNCTION -- MsgBox(0, "", $firstName & " " & $lastName & " (" & $age & ")") EndFunc The only catch with this method is that it produces a very simplistic error message. Even still, the fact that you only have to type out arguments once makes it a reasonable approach, in my opinion. The same logic can also be used for making function contracts (for example: $firstName mustn't be an empty string etc...).
What do you think? How do you go about such things?
Hey, just wondering if anyone has ever encountered intermittent COM Object Errors with Microsoft.XMLDOM pulling node values. I'm currently getting "Bad Variable Type" intermittently, and simply running the script again would allow it to get further in the parsing loop, only to encounter the error again. The data is persistent, and it is always a string.
Here's a snippet of where the error event occurs
$Target = "Item001" $SearchItem = $oXML.SelectNodes("//Items/Name[. = """&$Target&"""]") If $SearchItem.Length==1 Then AddToLog("XML: Found a match for """&$Target&""", Gathering details...") $TargetItem = $SearchItem.Item(0).ParentNode $ItemSKU = XMLGetValue($TargetItem, "SKU") Endif and here's the snip of my XMLGetValue function where the error is always triggered on the $Value = ...
Func XMLGetValue($Node="", $ValueName="", $NestLevel=0) ... If $Node.GetElementsByTagName($ValueName).Item(0).ChildNodes.Length==1 Then $Value = $Node.GetElementsByTagName(String($ValueName)).Item(0).ChildNodes(0).NodeValue Else ...Tell me there are more than one result for the target Endif ... EndFunc I added the string() as a counter measure but that doesnt fix the error. The XML file contains standard data with no attributes or anything funky.
The weird thing is that if i reboot my workstation it might get all the way through, and then if i run it again it may burp some where throughout the loop process (For each item, get SKU, Add SKU to array, Do stuff with array contents afterwards).
I have added sleep timers to my loops to try and pace the XML requests in case it was a sort of buffer underrun issue but im not certain whats going on.
Again, i could run the script and it would work perfectly and then fail another time. I've read up about readyState, but i dont know how to incorporate it in my script.
Has anyone seen this before? Thanks in advance for your help.
I'm trying to get an array from a website so that I can just get the url, but I am not sure how. I read a bit of arrays but I have a feeling I'd have to be writing a lot more than what I should be. I will include the script I have so far and the API url for what I want.
API: https://api.fast.com/netflix/speedtest?https=true&token=YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm&urlCount=1 (I want the 'url' array that contains the url)
#include <MsgBoxConstants.au3> #include <Inet.au3> #include <Array.au3> $site = _INetGetSource('http://api.fast.com/netflix/speedtest?https=true&token=YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm&urlCount=1') MsgBox($MB_SYSTEMMODAL, "Title", $site)
I am trying to allow the GUI to gather info as to when to execute a function. I am having trouble doing this. So far this is what I have.
;Timer Func timer () If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer $iMsgBoxAnswer = MsgBox(36,"Timer","Please format your answer in 00:00:00:000") Select Case $iMsgBoxAnswer = 6 ;Yes Global $infotime = InputBox ('Time', 'What time to execute?') Do $rawtimer = ToolTip(@Hour & ':' & @Min & ':' & @Sec & ':' & _MSec()) until $rawtimer = $infotime if $rawtimer = $infotime Then msgbox (0,'Worked','Worked') Else EndIf Case $iMsgBoxAnswer = 7 ;No Exit EndSelect EndFunc Func _MSec() Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort') DllCall('kernel32.dll', 'none', 'GetSystemTime', 'ptr', DllStructGetPtr($stSystemTime)) $sMilliSeconds = StringFormat('%03d', DllStructGetData($stSystemTime, 8)) $stSystemTime = 0 Return $sMilliSeconds EndFunc I have also tried _GUIToolTip_GetText in order to read the tooltip until the time specified, but it still doesn't work. Any help would be great.