Jason,
  Since you seem to mess with VBScript a bit, you might be interested in 
using the RMScript DLL I wrote that is a wrapper for the MS Script Control 
ver 1.0.  It allows you to store your VBS as VarChar data, pass the Script 
to the Script engine, then call it from RBAse using DLCall.  This is pretty 
nifty where you want to return values directly to an RBase variable.

The RMScript, examples and helpfile are at: 
http://www.byerley.net/RMScriptPak.zip





----- Original Message ----- 
From: "Jason Kramer" <[email protected]>
To: "RBASE-L Mailing List" <[email protected]>
Sent: Friday, July 06, 2012 2:07 PM
Subject: [RBASE-L] - File Searching


:    This is a long delayed response to Karen's message.  I had several 
other things I was working on, and know that the issue is fixed, but over 
the years I have seen many posts looking for ways to search files based on 
different criteria like name, date, size, etc...  I wrote a VB Script file 
that will generate a CSV list of all the files and directories in a given 
directory and collect several bits of information about each.  I use a 
stored procedure to call the VB Script and to load the results into a temp 
table for searching.  I'll paste my code below for anyone who wants it.
:    This code calls the CHKTABLE SP I mentioned in an earlier message.  I 
have not duplicated it here.
:    There is one slight problem to searching files this way.  The R:BASE 
wildcards (_ and %) are valid for use in file names.  If you want to search 
with them as wildcards, then you can SELECT ... LIKE 'whatever%' or SELECT 
... CONTAINS 'whatever_.docx'.  If, on the other hand you are looking for a 
file with a name that contains either of those characters, you have to 
escape them, so you have to use LIKE.  I recommend the pipe '|' as an escape 
character since it is an invalid Windows file name character.  SELECT ... 
LIKE 'doc|_.txt' ESCAPE '|' would return doc_.txt, but not doc1.txt.
:    If you do use this SP and VBS file, make sure that you create vdlsource 
TEXT 255 as the only argument (Windows file names are limited to 255 
characters) and set the return type to be an integer.  Remember, a return of 
0 IS NOT AN ERROR, it just means the source directory is empty.  -1 
indicates an error.
:    There are three files.  the VB Script file, the RMD file that makes the 
SP, and an RGW file used for the import.
:    Please let me know if you have any questions or suggestions.
:                                                    Thanks,
:                                                    Jason
:
: VB Script file
: 'GenDirList.vbs
: 'Jason Kramer
: '07-05-2012
:
: 'This script generates a CSV file containing a list of all the files and 
folders in
: 'a given folder.  It requires one parameter, the folder to scan.  It will 
produce an
: 'output file named dirlist.csv in the same folder this file resides in if 
the source
: 'folder is found.  If the source folder itself does not exists, no output 
file will
: 'be generated, and any previous output file will be deleted.  If the 
source folder
: 'exists, but is empty, then dirlist.csv will be created, but will be 
empty.  If the
: 'source folder exists and contains any files or folders, they will be 
listed in
: 'dirlist.csv, one per line with the following format:
: 'name,date created,date last accessed,date modified,size,type (based on 
extension),kind (FILE or FOLDER)
: 'If there is an existing dirlist.csv when this script runs, it will be 
overwritten or deleted
: 'without warning.
:
: Option Explicit
: Dim fso,sBasefol,folBaseFol,fleDirList,fleCurFile,folCurFol
: 'File system object,the path to the source(base) folder
: 'the base folder object,the output file,the current file
: 'the current sub-folder.
:
: Set fso = CreateObject("Scripting.FileSystemObject")
: If WScript.Arguments.Count = 1 Then
:    sBaseFol = WScript.Arguments(0)
:    If fso.FolderExists(sBaseFol) Then
:        Set folBaseFol = fso.GetFolder(sBaseFol)
:        Set fleDirList = fso.OpenTextFile(("dirlist.csv"), 2, True, 0)
:        If folBaseFol.Files.Count <> 0 Then
:            For Each fleCurFile in folBaseFol.Files
:                fleDirList.WriteLine(fleCurFile.Name + "," + 
Cstr(fleCurFile.DateCreated) + "," + Cstr(fleCurFile.DateLastAccessed) + "," 
+ CStr(fleCurFile.DateLastModified) + "," + Cstr(fleCurFile.Size) + "," + 
fleCurFile.Type + ",FILE")
:            Next
:        End If
:        If folBaseFol.SubFolders.Count <> 0 Then
:            For Each folCurFol in folBaseFol.SubFolders
:                fleDirList.WriteLine(folCurFol.Name + "," + 
Cstr(folCurFol.DateCreated) + "," + Cstr(folCurFol.DateLastAccessed) + "," + 
CStr(folCurFol.DateLastModified) + "," + Cstr(folCurFol.Size) + "," + 
folCurFol.Type + ",FOLDER")
:            Next
:        End If
:        fleDirList.Close
:    Else
:        If fso.FileExists("dirlist.csv") Then
:            fso.DeleteFile("dirlist.csv")
:        End If
:    End If
: Else
:    If fso.FileExists("dirlist.csv") Then
:        fso.DeleteFile("dirlist.csv")
:    End If
: End If
:
: RMD File
: -- DIRLIST Stored Procedure
: -- Jason Kramer
: -- 07-05-2012
:
: -- This RMD file is used by the DIRLIST stored procedure.  It requires one
: -- parameter, the source directory (folder), and returns an integer 
indicating
: -- an error or the number of rows (files and directories) in the source
: -- directory.  It creates the TEMP table tdirlist to store the name and 
some
: -- information (date created,date last accessed,date last 
modified,size,type,
: -- and kind) about each file or directory.  If the source folder is empty, 
then
: -- tdirlist will still be created, but will have zero rows (a return value 
of
: -- zero IS NOT AN ERROR.  It is a count.).  If the source folder does not
: -- exist, or an error occurs, a negative one will be returned.  If 
tdirlist
: -- already exists from a prvious call, then it will be emptied and 
refilled
: -- with new data.
: -- The size is given in bytes.  All directories (folders) will have a size 
of
: -- zero since this is how Windows reports their size.  This IS NOT an 
error.
: -- The type is what Windows consideres the file based on its extension, 
not
: -- its contents.
: -- The kind is simply FILE for files and FOLDER for directories (folders).
:
: -- DIRLIST requires the CHKTABLE stored procedure to exist.
: -- DIRLIST requires the gendirlist.vbs file to exist in the current 
directory.
: -- DIRLIST requires the dirlist.rgw file to exist in the current 
directory.
:
: -- Required parameter - vdlsource TEXT - the source directory(folder).
:
: -- Return value:
: --  -1       - An error occured.
: --   0 ... X - The number of files and folders in the source.
:
: SET VAR vdllaunch TEXT = NULL
: SET VAR vdlretval INTEGER = NULL
:
: SET VAR vdllaunch = 'gendirlist.vbs|"' + .vdlsource + '"|W'
:
: LAUNCH .vdllaunch
:
: IF (CHKFILE('dirlist.CSV')) = 1 THEN
:  IF (CALL chktable('tdirlist')) = 0 THEN
:    CREATE TEMPORARY TABLE tdirlist (fname LONG VARCHAR NOT NULL,fdatec 
DATETIME NOT NULL,fdatela DATETIME NOT NULL,fdatelm DATETIME NOT NULL,fsize 
INTEGER NOT NULL,ftype LONG VARCHAR NOT NULL, fkind TEXT 6 NOT NULL)
:  ELSE
:    DELETE FROM tdirlist
:  ENDIF
:  IF SQLCODE < 0 THEN
:    SET VAR vdlretval = -1
:  ENDIF
:
:  GATEWAY import CSV dirlist.csv REPLACE tdirlist OPTION 
SPECIFICATION_FILE_NAME dirlist.rgw
:  IF SQLCODE < 0 THEN
:    SET VAR vdlretval = -1
:  ELSE
:    SELECT COUNT fname INTO vdlretval FROM tdirlist
:  ENDIF
: ELSE
:  SET VAR vdlretval = -1
: ENDIF
:
: CLEAR VAR vdlsource,vdllaunch
:
: RETURN .vdlretval
:
: RGW File
: [Common]
: App=R:BASE eXtreme 9.5(64)
: Description=Gateway Import: specification
: Specification=dirlist
: DatasetKeys=fname;fdatec;fdatela;fdatelm;fsize;ftype
: Mode=4
: TableType=Text
: SourceFileName=C:\Users\jjkramer\Desktop\Test\dirlist.csv
: CharacterSet=0
: [Mappings]
: Count=7
: Map0=fname = Field1
: Map1=fdatec = Field2
: Map2=fdatela = Field3
: Map3=fdatelm = Field4
: Map4=fsize = Field5
: Map5=ftype = Field6
: Map6=fkind = Field7
: [Text]
: FieldDelimiter=2C
: TextQualifier=22
: RecordSeparator=0D0A
: Fixed=0
: RowFirst=1
: RowLast=2147483647
: [DataFormat]
: DateOrder=0
: DateSeparator=2F
: TimeSeparator=3A
: DecimalSeparator=2E
: FourDigitYear=1
: LeadingZerosInDate=0
:
:
:
:
: Jason Kramer
: University Archives and Records Management
: 002 Pearson Hall
: (302) 831 - 3127 (voice)
: (302) 831 - 6903 (fax)On 6/14/2012 3:55 PM, [email protected] wrote:
:
:  Okay, now I see it.  I guess I've been lucky then?  I've always used
:  wildcards up until now, and it's never been unpredictable.
:
:  So then is there any reliable way to check for files in a directory
:  without having to load a directory listing into a file, load into a temp
:  table, etc.?   Alot of work when a simple Chkfile always used to work
:  for me...
:
:  Karen
:
:
:
:  In a message dated 6/14/2012 2:48:52 PM Central Daylight Time, 
[email protected] writes:
:
:    Karen,
:      Better make that trip to the Opthamologist... ;-)
:
:    From the 6.5 HelpFile:
:
:    "CHKFILE(filename))
:
:    Checks to see if a file exists. If no path is specified, the function 
checks
:    for the file in the current directory. Otherwise, the function checks 
for
:    the file in the specified location.
:
:    The function returns a 1 if the file is found, and 0 if it is not 
found.
:    Wildcards in the filename will produce unpredicatable results. "
:
:    From the 9.1 HelpFile:
:
:    "(CHKFILE('filespec'))
:    Checks to see if a file or folder name exists. If no path is specified, 
the
:    function checks for the file or folder name in the current directory.
:    Otherwise, the function checks for the file or folder name in the 
specified
:    location.
:
:    The function returns a 1 if the file or folder name is found, and 0 if 
it is
:    not found. Wildcards in the filename will produce unpredicatable 
results."
:
:
:
:
: 


Reply via email to