>Is there an easy way to capture information of an input file into a local
>macro, so it can be saved as a note with Stata data set?
>I am looking for information similar to that stored in c(filename) and
>c(filedate) for a Stata dataset in memory,
I have made a general ado-file for this: dirlist.ado. It produces a directory list and puts the result into return macros. Ado-file and hlp-file below. Actually it is part of a collection of ado-files which I hope to submit to the SSC archives.
It has been tested in Mac OS X and Windows XP. There could be some problems with layout of dir output, however. Please report such problems to me.
Regards,
Morten Andersen
----------------------------------------------------------------------------
Morten Andersen, MD, PhD Research Unit of General Practice
Senior Researcher University of Southern Denmark
Phone +45 6550 3791 Winsloewparken 19
Fax +45 6591 6089 DK-5000 Odense C
E-mail [email protected] Denmark
----------------------------------------------------------------------------
Cut out the ado and hlp files below.
Please note that there could be problems with line breaks caused by the e-mail program.
----------------------- dirlist.ado--------------------------------------------
*! 1.0.4 MA 2003-12-04
* saves directory data in r() macros fnames, fdates, ftimes, fsizes, nfiles
* dirfile, dodoc, logdo, project
*--------+---------+---------+---------+---------+---------+---------+---------
program define dirlist, rclass
version 8
syntax anything
tempfile dirlist
if "`c(os)'" == "Windows" {
local shellcmd = `"dir `anything' > `dirlist'"'
shell `shellcmd'
}
if "`c(os)'" == "MacOSX" | "`c(os)'" == "Unix" {
local shellcmd = `"ls -lkT `anything' > `dirlist'"'
shell `shellcmd'
}
* read directory data from temporary file
tempname fh
file open `fh' using "`dirlist'", text read
file read `fh' line
local nfiles = 0
while r(eof)==0 {
if `"`line'"' ~= "" & substr(`"`line'"',1,1) ~= " " {
* read name and data for each file
if "`c(os)'" == "MacOSX" | "`c(os)'" == "Unix"{
local fsize : word 5 of `line'
local fda : word 6 of `line'
local fmo : word 7 of `line'
local ftime : word 8 of `line'
local fyr : word 9 of `line'
local fname : word 10 of `line'
local fdate = "`fmo'"+" "+"`fda'"+" "+"`fyr'"
local fdate = string(date("`fdate'","mdy"),"%dCY-N-D")
}
if "`c(os)'" == "Windows" {
local fdate : word 1 of `line'
local ftime : word 2 of `line'
local fsize : word 3 of `line'
local fname : word 4 of `line'
}
local fnames "`fnames' `fname'"
local fdates "`fdates' `fdate'"
local ftimes "`ftimes' `ftime'"
local fsizes "`fsizes' `fsize'"
local nfiles = `nfiles' + 1
}
file read `fh' line
}
file close `fh'
return local fnames `fnames'
return local fdates `fdates'
return local ftimes `ftimes'
return local fsizes `fsizes'
return local nfiles `nfiles'
end
* end
----------------------- dirlist.hlp--------------------------------------------
{smcl}
{* 2003-12-04}{...}
{hline}
help for {hi:dirlist} {right: (version 1.0.4, 2003-12-04)}
{hline}
{title:Retrieve directory information}
{p 4 13 2}{cmd:dirlist} [{it:filespec}]
{title:Description}
{p 4 4 2}
{cmd:dirlist} is used as the {cmd:dir} command, but retrieves the information
about files in in return macros (see below).
{p 4 4 2}
{it:filespec} may be any valid Windows, Unix, or Macintosh file path or file
specification (see {hi:[U] 14.6 File-naming conventions}) and may include
"{cmd:*}" to indicate any string of characters.
{p 4 4 2}
Directory data are written to a temporary file using shell commands
(Windows {cmd:dir} and Mac OS X or Unix {cmd:ls}) and subsequently read by
the program.
{p 4 4 2}
Mac OS X: The {it:filespec} should not be enclosed in quotes, and spaces should be
preceded by an escape character "{cmd:\}".
{title:Examples}
{p 4 8 2}
{cmd:. dirlist dm50*.do}
{p 4 4 2}
You can then access the returned results:
{p 4 4 2}
{cmd:. return list}
macros:
r(nfiles) : "4"
r(fsizes) : "814 209 296 493"
r(ftimes) : "13:27:15 13:29:05 12:22:01 13:41:09"
r(fdates) : "2003-10-30 2003-10-30 2003-10-30 2003-10-30"
r(fnames) : "dm501.do dm502.do dm503.do dm504.do"
{p 4 8 2}
{cmd:. dirlist ~/DM\ data/dm50*.do} {it:(Mac OS X, space in directory name)}
{title:Possible problems}
{p 4 4 2}
Quotes around {it:filespec} and spaces in path names on other OSs?{break}
Format of directory lists regarding column arrangement and date format?
{title:Author}
{p 4 4 2}
Morten Andersen, University of Southern Denmark, Denmark{break}
[email protected]
{title:Also see}
{p 4 13 2}
Online: help for {help dir}, {help shell}, {help return}
{p_end}
------------------ END PROGRAMS --------------------------------------
<<winmail.dat>>