frankbosco Posted March 13, 2009 Share Posted March 13, 2009 (edited) Autoit forum, I think this is a fairly simple question, but I am very new to programming, and I would greatly appreciate some script examples for this problem. I would like to sequentially open instances of Notepad.exe, wait for it to be filled and closed by a user, then open a new instance of Notepad.exe (please see sample script below). However, I would like the .txt files (e.g., file1.txt, file2.txt) to be selected without replacement in a random order. I'm thinking that I can loop this basic 3-liner, and define the to-be-opened filename as a variable linked to an array (from which to be selected randomly without replacement). However, I am very unskilled. Is there such a code that would loop the 3-liner until it has selected all of the filenames in random order without replacement from the array... then close? Thanks a bunch in advance! Frank Run("notepad.exe file1.txt") [the user types some information, and closes the .txt file] WinWaitClose("file1.txt - Notepad") Run("notepad.exe file2.txt") [the user types some information, and closes the .txt file] WinWaitClose("file2.txt - Notepad") Run("notepad.exe file3.txt") [the user types some information, and closes the .txt file] WinWaitClose("file3.txt - Notepad") Edited March 13, 2009 by frankbosco Link to comment Share on other sites More sharing options...
DaRam Posted March 13, 2009 Share Posted March 13, 2009 Dim $I, $IMax = 5; 5 Times, Increase or Decrease or Get from User if necessary Dim $Filename For $I = 1 to $IMax $Filename = "file" & $I & ".Txt" Run("notepad.exe " & $Filename) ; [the user types some information, and closes the .txt file] WinWaitClose($Filename & " - Notepad") Next;$I Link to comment Share on other sites More sharing options...
Varian Posted March 13, 2009 Share Posted March 13, 2009 Maybe add a couple of lines, so no "cannot find file, do you want to create this file?" prompt and a winwait so the script waits for the notepad window to open. EX: FileWrite('file3.txt', '') Run("notepad.exe file3.txt") WinWait("file3.txt - Notepad", '') WinWaitClose("file3.txt - Notepad", '') Link to comment Share on other sites More sharing options...
frankbosco Posted March 13, 2009 Author Share Posted March 13, 2009 (edited) Dim $I, $IMax = 5; 5 Times, Increase or Decrease or Get from User if necessary Dim $Filename For $I = 1 to $IMax $Filename = "file" & $I & ".Txt" Run("notepad.exe " & $Filename) ; [the user types some information, and closes the .txt file] WinWaitClose($Filename & " - Notepad") Next;$I Thanks both of you for your excellent suggestions! I have implemented both of your suggestions, but have one remaining issue -- I need the script to randomly select the text files (for example, on the first run of the program, it may open the text files in the order: 2, 3, 1; on the second program run it may select 3, 1, 2, etc.) Any insight would be greatly appreciated! Thanks in advance! Currently used code: Dim $I, $IMax = 3 ; (3 Times, Increase or Decrease or Get from User if necessary) Dim $Filename For $I = 1 to $IMax $Filename = "file" & $I & ".txt" Run("notepad.exe " & $Filename) ; [the user types some information, and closes the .txt file] WinWait($Filename & " - Notepad") WinWaitClose($Filename & " - Notepad") Next;$I Edited March 13, 2009 by frankbosco Link to comment Share on other sites More sharing options...
Varian Posted March 13, 2009 Share Posted March 13, 2009 It's not terribly random, but here it is. The larger the value of $iMax, the more random the numbers may be: #include <Array.au3> Dim $i, $iMax = 3 ;(3 Times, Increase or Decrease or Get from User if necessary) Dim $FileNameArray[$iMax] For $x = 0 To UBound($FileNameArray) - 1 $FileNameArray[$x] = "File" & ($x + 1) & ".txt" Next For $i = 1 To $iMax $CurrentNumber = Random(0, UBound($FileNameArray) - 1, 1) $CurrentName = $FileNameArray[$CurrentNumber] FileWrite($FileNameArray[$CurrentNumber], "") Run("notepad.exe " & $CurrentName) ; [the user types some information, and closes the .txt file] WinWait($CurrentName & " - Notepad") WinWaitClose($CurrentName & " - Notepad") _ArrayDelete($FileNameArray, $CurrentNumber) Next ;$i Link to comment Share on other sites More sharing options...
Spiff59 Posted March 13, 2009 Share Posted March 13, 2009 (edited) Or you could just jumble your array up front and go from there... #include <File.au3> #include <Array.au3> Dim $SourceArray, $tmp _FileReadToArray(@ScriptDir & "\files.txt", $SourceArray) ;_ArrayDisplay($SourceArray); filelist in For $i= $SourceArray[0] to 1 Step -1 $new = Random(1, $i + 1, 1) $tmp = $SourceArray[$i] $SourceArray[$i] = $SourceArray[$new] $SourceArray[$new] = $tmp Next ;_ArrayDisplay($SourceArray); filelist out For $i = 1 to $SourceArray[0] ; do your notepad stuff here Next Edit: code tweak. grr!!! Edited March 13, 2009 by Spiff59 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