Knight Posted April 27, 2006 Share Posted April 27, 2006 This script will list all the variable names in a different script. It took me a lot longer than I had expected It is not as fast as I thought it would be, but that is probably because it isn't the best way of doing this. It will create an array of all the variables in the script; currently it writes that array to a file. That is easily changeable however. To use; put the script to read in the $Source variable, and the file to be output with all variable names at $Results. expandcollapse popup#include <File.au3> #include <Array.au3> $Source = "test.au3" $Results = "results.txt" Dim $File $Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_$" $Variables = _ArrayCreate(1) _FileReadToArray($Source, $File) For $i = 1 To (UBound($File, 1) - 1) $Instance = 0 $Line = StringSplit($File[$i], "") Do $VarStart = _ArraySearch($Line, Chr(36), $Instance) $Instance = $VarStart + 1 If $VarStart > 0 Then $Var = "" For $t = $VarStart To UBound($Line, 1) - 1 If StringInStr($Char, $Line[$t]) > 0 Then $Var = $Var&$Line[$t] Else ExitLoop EndIf Next If $Var <> "" And _ArraySearch($Variables, $Var) = -1 Then _ArrayAdd($Variables, $Var) EndIf Until $VarStart <= 0 Next $Variables[0] = UBound($Variables, 1) - 1 _FileWriteFromArray($Results, $Variables) ;_ArrayDisplay($Variables, "") I would love to see any other idea's people come up with for doing this same thing. I plan on using it for a Variable Renamer later. Thanks, JKnight Link to comment Share on other sites More sharing options...
jvanegmond Posted April 27, 2006 Share Posted April 27, 2006 This is nice, keep working on it. I think this will be useful when you have more functions on it and you can rename things, that sort of things. If i would build this, i would read char by char and check if it's a $ and then check to the right until you reach a space or a new line.. then store everything that is between and continue reading char by char github.com/jvanegmond Link to comment Share on other sites More sharing options...
Knight Posted April 27, 2006 Author Share Posted April 27, 2006 This is nice, keep working on it. I think this will be useful when you have more functions on it and you can rename things, that sort of things. If i would build this, i would read char by char and check if it's a $ and then check to the right until you reach a space or a new line.. then store everything that is between and continue reading char by charThat is what I had originally done, then i realized other ways of declaring variables as I was making it. So I had to start over. IE:$Var=1 Dim $Var, $Tree, $Hi[900]All those wouldn't work if I was looking for the variable to end with a space. Link to comment Share on other sites More sharing options...
gcriaco Posted April 27, 2006 Share Posted April 27, 2006 Suggestion: the output file should list separately variables that are not used in the code, so that users can clean up scripts. Tanks anyway Peppe Link to comment Share on other sites More sharing options...
taurus905 Posted April 27, 2006 Share Posted April 27, 2006 Knight, I like what you did. I wrote something similar for my script obfuscator a while back. I changed the $Source to allow users to pick a script, starting from their desktop. And I changed the $Results to use the name of the script with a .txt extension. You don't have to keep my changes. Feel free to modify them as you see fit. Keep working on it. I think it could be very useful. taurus905 expandcollapse popup#include <File.au3> #include <Array.au3> $Source = FileOpenDialog("Choose a script to find Variables in:", @DesktopCommonDir, "Scripts (*.au3)", 1 + 2) If @error Then Exit $Results = StringTrimRight($Source, 4) & ".txt" Dim $File $Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_$" $Variables = _ArrayCreate(1) _FileReadToArray($Source, $File) For $i = 1 To (UBound($File, 1) - 1) $Instance = 0 $Line = StringSplit($File[$i], "") Do $VarStart = _ArraySearch($Line, Chr(36), $Instance) $Instance = $VarStart + 1 If $VarStart > 0 Then $Var = "" For $t = $VarStart To UBound($Line, 1) - 1 If StringInStr($Char, $Line[$t]) > 0 Then $Var = $Var&$Line[$t] Else ExitLoop EndIf Next If $Var <> "" And _ArraySearch($Variables, $Var) = -1 Then _ArrayAdd($Variables, $Var) EndIf Until $VarStart <= 0 Next $Variables[0] = UBound($Variables, 1) - 1 _FileWriteFromArray($Results, $Variables) ;_ArrayDisplay($Variables, "") "Never mistake kindness for weakness."-- Author Unknown --"The highest point to which a weak but experienced mind can rise is detecting the weakness of better men."-- Georg Lichtenberg --Simple Obfuscator (Beta not needed.), Random names for Vars and Funcs Link to comment Share on other sites More sharing options...
Developers Jos Posted April 27, 2006 Developers Share Posted April 27, 2006 Just a FYI: Tidy has a documentation option (Indent+Proper+Doc button) that will generate a file containing the script showing all loops and a report of all variables used in which line. SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
Knight Posted April 28, 2006 Author Share Posted April 28, 2006 (edited) Thanks taurus. I have added the changes since I really like them; with some alterations of course I have added a variable renamer that will replace variables with a random 15-digit variable. It will check for duplicates if by any chance it generates the same number twice. It will generate a new script with the changes at n&"_VarRename.au3". Some limitations this script has is: You will need to manually change variables when using: IsDeclared(), Eval(), etc where it checks a variable through a string. $Var = 1 If IsDeclared("Var") Then Exit You will need to manually change the "Var" inside the IsDeclared to the newly renamed variable. Another problem is with variables starting with the same characters as another variable. $n = 1 $new = 2 Will result in: $098237561294762 = 1 $098237561294762ew = 2 because of the string replace of $n. However they will both still be different variables so it shouldn't affect performance. Finally, all $ signs will be considered a variable and will replace them ALL with a variable. One workaround is using Chr(36) when wanting to display a $ sign rather than actually typing it. expandcollapse popup#include <File.au3> #include <Array.au3> $Source = FileOpenDialog("Choose a script to find Variables in:", @DesktopCommonDir, "Scripts (*.au3)", 3) If @error Then Exit $Results = StringTrimRight($Source, 4) & "_VarRename.au3" Dim $File $Char = Chr(36)&"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_" $Variables = _ArrayCreate(1) _FileReadToArray($Source, $File) For $i = 1 To (UBound($File, 1) - 1) $Instance = 0 $Line = StringSplit($File[$i], "") Do $VarStart = _ArraySearch($Line, Chr(36), $Instance) $Instance = $VarStart + 1 If $VarStart > 0 Then $Var = "" For $t = $VarStart To UBound($Line, 1) - 1 If StringInStr($Char, $Line[$t]) > 0 Then $Var = $Var&$Line[$t] Else ExitLoop EndIf Next If $Var <> "" And _ArraySearch($Variables, $Var) = -1 Then _ArrayAdd($Variables, $Var) EndIf Until $VarStart <= 0 Next $Variables[0] = UBound($Variables, 1) - 1 Dim $NewVariables[UBound($Variables, 1)] $Replace = FileRead($Source) For $r = 1 To UBound($Variables, 1) - 1 While 1 $NewVariables[$r] = Chr(36)&Random(100, 999, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1)&Random(0, 9, 1) If _ArraySearch($NewVariables, $NewVariables[$r]) = $r Then ExitLoop WEnd $Replace = StringReplace($Replace, $Variables[$r], $NewVariables[$r], 0) Next If FileExists($Results) Then FileDelete($Results) FileWrite($Results, $Replace) Any bugs, suggestions, improvements, or changes to the code that would speed it up or fix any limitations are greaty appreciated. -JKnight Edited April 28, 2006 by Knight VenusProject2 1 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