*! usesasdel Version 2.0 dan.blanchette@duke.edu 16Mar2009 *! Center of Entrepreneurship and Innovation Duke University's Fuqua School of Business ** shortdir Version 2.0 dan_blanchette@unc.edu 17Jan2008 ** research computing, unc-ch * - added check that if forward slashes used as dir separators * then that is handled by converting them to back slashes * - uses Nick Cox's way of loading a text file line by line * into a local macro instead of reading it in as a dataset ** shortdir Version 1.1 dan_blanchette@unc.edu 28Oct2004 * - added test that directory actually exists ** shortdir Version 1.0 dan_blanchette@unc.edu 09Oct2003 ** the carolina population center, unc-ch program define shortdir, rclass version 8 syntax using/ [, SHort ] confirmdir "`using'" if _rc !=0 { di `"{error}The directory "`using'" does not exist."' exit _rc } if "`c(os)'"=="Windows" { preserve local cwd "`c(pwd)'`macval(\\\)'" if "`using'"=="." { local using "`macval(cwd)'" } if "`using'"=="`cwd'" { quietly cd .. } // check if forward slashes used and replace them if so local subtest : subinstr local using `"/"' `""' , count(local cnt) if `cnt' != 0 { local using : subinstr local using "/" "\" , all } tokenize "`using'" , parse("\") local i=1 while "``i''" !="" { if `i'==1 { local path "`1'" } else { if "`short'"=="short" { /* create macro that conditionally checks * for longer than 8 letter directory names */ local gt8=(length("``i''")>8) local gt8="| `gt8'" } if index("``i''"," ") `gt8' { /* if sub dir name has space in name or maybe longer than 8 */ tempfile temp _getfilename "`temp'" local tfilen "`r(filename)'" local tfileh=substr("`tfilen'",1,index("`tfilen'",".")-1) /* create file handle */ quietly { cd "`path'\" // options /x and /a create a short directory listing // so `temp' is a very small, short file ! dir /x /a "``i''"* > "`temp'" tempname in file open `in' using `"`temp'"', r file read `in' line local dline "" local dir "" while r(eof) == 0 { // local line: subinstr local line "`old'" "`new'" file read `in' line if `: list local(dir) in local(line) ' { local dline `"`line'"' } } local gotit = 0 local shortname "" local n = 1 while `gotit' == 0 { local shortname : word `n' of `dline' if `: list local(shortname) == local(dir) ' { // the shortname of the subdir is the next word after "" local shortname : word `= `n' + 1' of `dline' local gotit = 1 } local n = `n' + 1 } } local sdir`i'=trim(substr(`"`shortname'"',1,10)) } /* end of if directory has a space */ else { local sdir`i' "``i''" } if "``i''"!="\" { local path "`macval(path)'\\`sdir`i''" } } /* if not the beginning of the path, like c: */ local i=`i'+1 } /* end of while loop */ quietly cd "`macval(cwd)'\\\" local shortdir="`path'"+"\" return local shortdir `shortdir' } /* end of if windows */ else { di "{error}shortdir only works in Windoze." exit } end