Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: Re: Listing user-written ado files called by program


From   daniel klein <klein.daniel.81@googlemail.com>
To   statalist@hsphsun2.harvard.edu
Subject   st: Re: Listing user-written ado files called by program
Date   Wed, 7 Sep 2011 13:24:17 +0200

Partha,

here is a skech of a program identifying user-written commands in a
do-file code. The syntax is

useduw <"path/file.ext">
(e.g., "c:/users/documents/myprog/foo.ado")

The program finds occurences of any command (i.e. ado-file) found in
the directories PLUS or PERSONAL in your (a)do-file code. All
user-written files used in the respective do-file are returned in
r(userwritten). Note that -useduw- might return too many files,
because the -filefilter- command that is used, searches for patterns.
Thus, the example line

reg price mpg weight foreign

in a (a)do-file will cause -useduw- to report that the -ice- command
(available from SSC) is used in the code. The reason is, that "price"
matches the pattern "ice". I have not found a solution to this problem
yet.

Here's the code (no help file, if you have problems just ask)

*! version 1.0.0 07sep2011 Daniel Klein

pr useduw ,rclass
	vers 12.0
	
	syntax anything(id = "dofile name") [, ADOPath(str)]
	
	* check file exists
	conf file `"`anything'"'
	
	* get directories
	if (`"`adopath'"' == "") loc adopath PLUS PERSONAL
	loc pwd `"`c(pwd)'"'
	foreach p of loc adopath {
		loc dirc : sysdir `p'
		cap cd `"`dirc'"'
		if !(_rc) loc dircts `"`dircts' `dirc'"'
		else di as txt `"(note : directory `dirc' not found)"'
		qui cd `"`pwd'"'
	}
	
	* main
	tempfile tmp_file
	foreach dirct of loc dircts {
		
		* get subdirectories
		loc subdir : dir `"`dirct'"' dir "*"
		foreach subd of loc subdir {
			
			* get ado files
			loc adof : dir `"`dirct'`subd'"' file "*.ado"
			foreach ad of loc adof {
	
				* check occurences of command
				loc cmd : subinstr loc ad ".ado" ""
				filef `"`anything'"' `tmp_file' ,f("`cmd'") t("")
				if r(occurrences) loc uw `uw' `cmd'
				erase `tmp_file'
			}
		}
	}
	
	* return results
	if (`"`uw'"' != "") {
		di as res _n "`uw'"
		ret loc userwritten `uw'
	}
end
e


Best
Daniel
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index