frankbosco Posted March 13, 2009 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
DaRam Posted March 13, 2009 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
Varian Posted March 13, 2009 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", '')
frankbosco Posted March 13, 2009 Author 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
Varian Posted March 13, 2009 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
Spiff59 Posted March 13, 2009 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
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