Mike,
Here is a stored procedure to do just what you ask. The comments at the top of
the file illustrate the usage, and how to PUT the procedure.
What you do in your code is set up the file mask you wish to filter, including
the full path or the relative path, then CALL the procedure. It will return
the count of the number of files in the table “filenams.” The table is a
temporary table, but your calling code must be responsible for DROPping it when
finished. Look in the code for the CREATE TEMPORARY TABLE command to see the
structure. You’ll end up with a row on the table for each file that meets the
mask you submit, with the proper date, time and file size information available.
---===========================================================
--- ftable.prc stored procedure to create and load table filenams using
--- the specified file mask 12/12/2008 Emmitt Dove
--- usage: SET VAR vfcount INTEGER = (CALL ftable(.vfmask)) where vfmask is
--- the filename mask to use. vfmask may include the full path
--- to the files, otherwise the current folder is assumed
--- to create the stored procedure do this:
---
--- PUT ftable.prc AS ftable fmask TEXT (200) RETURN INTEGER +
--- COMMENT 'Load table filenams from specified mask'
---
--- filename mask will be in variable fmask
--- returns a count of the number of files in the temporary table
--- note: the calling code is responsible for dropping the temporary table
-- want to retain current setting for SHORTNAME
SET VAR fshort = (CVAL('shortname'))
IF fshort IS NULL THEN
-- parameter not recognized by this version of R:BASE
RETURN 0
ENDIF
IF fshort = 'ON' THEN
SET SHORTNAME OFF
ENDIF
-- set up the temporary filename to hold the directory listing
SET VAR fxfn = (FILENAME(0))
SET VAR ffnlen = (SLEN(.fxfn))
SET VAR ftempfn = (SGET(.fxfn,8,(.ffnlen - 11))+CTXT('.lst'))
-- delete the file R:BASE created
DELETE &fxfn
-- get the listing
OUTPUT &ftempfn
SET VAR fcmd = (CTXT('DIR')&CTXT(.fmask))
&fcmd
OUTPUT SCREEN
-- create the table
SET ERROR MESSAGE 2038 OFF
DROP TABLE filenams
SET ERROR MESSAGE 2038 ON
CREATE TEMPORARY TABLE filenams (filedate DATE,filetime TIME,ampm TEXT (2),+
filesize INTEGER,longfn TEXT (60))
-- load the table
LOAD filenams +
FROM &ftempfn +
AS FORMATTED USING filedate 1 8,filetime 13 17,ampm 19 20,+
filesize 28 40,longfn 42 101
-- delete the temp file holding the listing
DELETE &ftempfn
-- restore SHORTNAME setting
SET VAR fcmd = (CTXT('SET SHORTNAME')&CTXT(.fshort))
&fcmd
-- remove irrelevant rows
DELETE ROWS +
FROM filenams +
WHERE longfn IN ('.','..','bytes','bytes free')
DELETE ROWS +
FROM filenams +
WHERE longfn IS NULL OR +
longfn = ' '
DELETE ROWS +
FROM filenams +
WHERE filesize IS NULL
-- fix the time values
UPDATE filenams +
SET filetime = (ADDHR(filetime,12)) +
WHERE ampm = 'PM' AND +
filetime < 12:00:00
-- get the number of rows
SET VAR fcount INTEGER
SELECT COUNT(*) INTO fcount INDIC fi1 FROM filenams
IF fcount IS NULL THEN
SET VAR fcount = 0
ENDIF
SET VAR vfcount INTEGER = .fcount
CLEAR VAR f%
RETURN .vfcount
---===========================================================
Emmitt Dove
Manager, Converting Applications Development
Evergreen Packaging, Inc.
[email protected]
(203) 214-5683 m
(203) 643-8022 o
(203) 643-8086 f
[email protected]
From: [email protected] [mailto:[email protected]] On Behalf Of Michael J.
Sinclair, MD
Sent: Sunday, January 04, 2009 7:58 PM
To: RBASE-L Mailing List
Subject: [RBASE-L] - Best way to import file names into a table
Hi all,
I want to be able to import all the filenames in a folder into a column in a
table. I also want to be able to import the entire pathname\filename.ext into a
different column.
Is there an easy way to do that or do I need do things like....
output temp.txt
dir
output screen
load tablename from temp.txt
etc....
TIA!
Mike