{smcl}
{hline}
help for {hi:log2do2}
{hline}

{title:Conversion of Stata log files to do files}

{p 8 15}{cmd:log2do2} {it:logfile} , {cmd:saving(}{it:filename} [ {{cmd:replace}|{cmd:append}} ]


{title:Description}

{p}{cmd:log2do2} extracts the command lines from a Stata text-format log file,
creating a file of syntax (ie, a do file).

{p}The program recognizes commands as lines in the log that begin with a period followed
by a blank space.  It also recognizes command that are wrapped over multiple lines
by Stata, and command that appear within {cmd:foreach} and {cmd:forvalues} loops.

{p}{cmd:log2do2} uses the Stata 7 {help file} command to read and write the file.  This command
was in an update to Stata; be sure your stata is fully {help update:up to date}.  The use
of {cmd:file} allows {cmd:log2do2} to preserve references to local macros in command lines.
The if the following line appears in a log file:

{p 8 8}{inp:. display "local x is `x'"}

{p}then the reference to {cmd:`x'} will appear in the do file as {cmd:`x'}, rather than
being expanded by Stata and, therefore, blanked out.

{p}Note that the program requires a text-format log file, and will not work with
a {help smcl}-formatted log.  See {help translatetext:translate} to translate a smcl
log into plain text format.


{title:Things to watch for}

{p}Several situations can confuse {cmd:log2do2}.  First, the block of code within
a {help forvalues} or {help foreach} loop are generally displayed in the log file as
numbered lines, rather than being preceded by a period and a space.  {cmd:log2do2}
handles this by noticing the beginning of the loop, and counting the open- and close-braces
(ie, {cmd:-)} and {cmd:)-} to find the end of the block of code.  This works correctly
unless there are unmatched brace characters in comments within the looped code.

{p}Second, Stata code can be written that will make output look to {cmd:log2do2} like
input lines.  For example, the command {cmd:display ". hello there"} will lead to the
line "hello there" appearing in the do file.

{p}Finally, if the log file was created by do file that split commands over multiple
lines, through use of the {cmd:/*} and {cmd:*/} delimiters, then {cmd:log2do2}
will string the command together on one long line.  The resulting do file will
work correctly, but might need editing for style points.


{title:Example}

{p 8 12}{input:. log2do2 "c:/My Files/mylog.log" , saving(c:/My Files/mydo.do) replace}


{title:Author}

{p 5 5}Nick Winter{p_end}
{p 5 5}Cornell University{p_end}
{p 5 5}nw53@cornell.edu{p_end}
