PDA

View Full Version : DIR cleanup


trconnet
2008-06-21, 12:04 AM
I am trying to make a LISP program that will read a dir output to be linked into a database at sometime.
Any ideas?
Thanks,
TC

C:
CD \
DIR *.* /s > C:\TEMP\TEXT_DB\FileIndex\i.txt
K:
DIR *.* /s >> C:\TEMP\TEXT_DB\FileIndex\i.txt



;|The program will create a tab delineated database of the output of doing dir *.* /s in DOS.
The database has the following fields:
FILENAME
FILESIZE
FILETIME
MON
DAY
YEAR
HR
MIN
AMPM
DIRPATH
FILE_HL (This formats the output as a hyperlink in MSACCESS)
FILEEXT
|;
(DEFUN C:DIR_NPT (/ CHAR DIRPATH DIRTYPE
FILE FILEEXT FILELINE FILENAME
FILESIZE FILETIME OUTF OUTFILE
str_out SV SV2 TXTF
V FILEDIR ASCCHAR FILEDIREND
FILEDIRSTART FILENAMEEND
GOCT SIZECT
)
(setq file (getfiled "Select a LIST File"
"/TEMP/TEXT_DB/FileIndex/"
"txt"
8
)
)
(setq txtf (open file "r"))
(setq outfile (getfiled "Select a Output File"
"/TEMP/TEXT_DB/FileIndex/"
"txt"
8
)
)
(setq outf (open outfile "w"))
(write-line
"FILENAME\tFILESIZE\tFILETIME\tMON\tDAY\tYEAR\tHR\tMIN\tAMPM\tDIRPATH\tFILE_HL\tFILEEXT"
outf
)
(setq DIRPATH "")
(WHILE
(setq V (READ-LINE txtf))
(setq filetime ""
MON ""
DAY ""
YEAR ""
HR ""
MIN ""
AMPM ""
filesize "\t"
filename "\t"
FILELINE "\t"
FILEEXT "\t"
SV "\t"
SV2 "\t"
CHAR " "
ascchar "\t"
GOCT 0
)
(SETQ SV (SUBSTR V 1 1))
(IF (= SV " ")
(SETQ SV2 (SUBSTR V 1 2))
(SETQ SV2 "")
)
(IF (= SV2 " D")
(SETQ DIRPATH (SUBSTR V 15 (STRLEN V)))
)
(IF (OR (= SV "0") (= SV "1"))
(SETQ FILELINE
V
)
)
(setq MON (substr FILELINE 1 2) DAY (SUBSTR FILELINE 4 2) YEAR (SUBSTR FILELINE 7 4)
HR (SUBSTR FILELINE 13 2) MIN (SUBSTR FILELINE 16 2) AMPM (SUBSTR FILELINE 19 2))

(setq FILETIME (substr FILELINE 1 20))
(SETQ FILESIZE (SUBSTR FILELINE 20 20))
(SETQ FILENAME (SUBSTR FILELINE 40 (STRLEN FILELINE)))
(IF (OR (= SV "0") (= SV "1"))
(SETQ FILEDIR DIRPATH)
(SETQ FILEDIR "")
)
(IF (/= (substr FILESIZE 7 1) "D")
(SETQ ASCCHAR "GO")
(SETQ FILESIZE "D")
)
(setq SIZECT 0)
(IF (= ASCCHAR "GO")
(SETQ SIZECT 1)
)
(WHILE (/= SIZECT 0)
(WHILE (= CHAR " ")
(setq CHAR (substr FILESIZE (1+ SIZECT) 1))
(setq SIZECT (1+ SIZECT))
)
(SETQ FILESIZE (SUBSTR FILESIZE SIZECT (- 20 SIZECT)))
(setq SIZECT 0)
)
(IF (= FILETIME "\t")
(SETQ ASCCHAR "\t")
)
(IF (AND (/= FILETIME "\t") (= ASCCHAR "GO"))
(setq GOCT (STRLEN FILENAME))
)
(SETQ SIZECT 0)
(while
(/= GOCT 0)
(setq FILEEXT (substr FILENAME GOCT 1))
(IF (/= FILEEXT ".")
(SETQ GOCT (1- GOCT))
(PROGN
(SETQ SIZECT GOCT)
(SETQ GOCT 0)
)
)
)
(IF (/= SIZECT 0)
(SETQ FILEEXT (substr FILENAME (1+ SIZECT)))
(SETQ FILEEXT "")
)
(IF (= (SUBSTR FILENAME 1 1) ".")
(PROGN
(SETQ FILENAME ""
FILESIZE ""
FILETIME ""
FILEDIR ""
SV "."
FILEEXT ""
)
)
)
(IF (OR (= SV "0") (= SV "1"))
(SETQ FILEDIRSTART (STRCAT FILEDIR "\\"))
(SETQ FILEDIRSTART FILEDIR)
)
(IF (OR (= SV "0") (= SV "1"))
(SETQ FILEDIREND (STRCAT FILEDIR "\t#"))
(SETQ FILEDIREND (STRCAT FILEDIR "\t"))
)
(IF (OR (= SV "0") (= SV "1"))
(SETQ FILENAMEEND (STRCAT FILENAME "#\t"))
(SETQ FILENAMEEND (STRCAT FILENAME "\t"))
)
(SETQ str_out (STRCAT FILENAME "\t" FILESIZE
"\t" FILETIME "\t"
MON "\t"
DAY "\t"
YEAR "\t"
HR "\t"
MIN "\t"
AMPM "\t"
FILEDIREND FILEDIRSTART
FILENAMEEND FILEEXT "\t"
ASCCHAR "\n"
)
)
(if (/= ASCCHAR "\t")
(princ str_out outf)
)
(if (= FILESIZE "D")
(princ str_out outf)
)
(setq V "")
)
(close txtf)
(close outf)
(princ)
)