1/ It is easier to redirect a file instead of providing parameters to a program.
2/ When you use redirections, the operating system works for you: it opens the file and feeds the program with its content.
C:\> AutoIt3.exe DiffPrettyfier.au3 < MyInput.txt > MyOutput.txt
The content of the script is straight forward:
$myInput = ConsoleRead(); do something here; (...)ConsoleWrite($myOutput)
But there is one problem that makes this a bit harder: AutoIT 'ConsoleRead' doesn't handle input bigger than '65535' characters. So here is a little workaround: use the function 'StdinRead' below instead of 'ConsoleRead':
;-----------------------------------------------------------------; Name .........: StdinRead; Description ..: Wrapper for ConsoleRead because it doesn't; handle big files; Warning ......: This is a workaround but it has limitations too,; I used a big file to test this function but it; might fail on a VERY big file (eg. if the file; contains 2 147 483 647 characters); original big file tested: 18 030 950; biggest string size allowed: 2 147 483 647; Parameters ...: n/a; Return .......: String read on STDIN or empty String "" if; nothing found on STDIN;-----------------------------------------------------------------Func StdinRead()Const $MAX_BUFFER = 65535$eofReached = False$fileContent = ""While Not $eofReached$buffer = ConsoleRead($MAX_BUFFER)If @error Or $buffer = "" Then $eofReached = True$fileContent &= $bufferWEndReturn $fileContentEndFunc ;==>StdinRead
NOTE: For "ConsoleWrite" to work as expected (redirecting output to stdout), you need to compile the script using the "/console" switch.
No comments:
Post a Comment