If you want to execute VBS or JS code seamlessly in the RBase environment, you can use my RMScript DLL which is a wrapper for the Microsoft Script Control.

The DLL makes it possible to return values from a running script to an RBase variable. It is also possible to execute VBS commands line by line from RBase using syntax like:

-- dimension a variable
SET VAR vres = (dlcall('RMScript.dll','MScrExec', 'Dim oWord'))
-- set an object instance to a variable
SET VAR vres = +
(dlcall('RMScript.dll','MScrExec', 'set oWord = createObject("Word.Application")'))
-- manipulate the object
SET VAR vres = (dlcall('RMScript.dll','MScrExec', 'oWord.visible = true'))
PAUSE FOR 5
SET VAR vres = (dlcall('RMScript.dll','MScrExec', 'oWord.visible = false'))

SET VAR vres = (dlcall('RMScript.dll','MScrExec', 'oWord.quit'))
SET VAR vres = (dlcall('RMScript.dll','MScrExec', 'set oWord = nothing'))

All this done using DLCall....


----- Original Message ----- From: "Jason Kramer" <[email protected]>
To: "RBASE-L Mailing List" <[email protected]>
Sent: Thursday, February 10, 2011 9:46 AM
Subject: [RBASE-L] - Re: Getting a file from a directory


Karen,
If you are sure that there will only be one file per part number, and if the part numbers are unique, then the first bit of VB code below will search for a file beginning with <PARTNO> and put it into a file. If you also want to extract the revision number, and you know that there will only be numbers between the final R (regardless of how many Rs there are in the part number itself) and the . in the file name (there there will be only on period in the file name), then the second code sample below will output a single line to a CSV file with the full file name,revision number.

VBScript 1
On Error Resume Next
Dim fso,folder,files,NewFile,sPartNo,sCurFName,iPartNoLen

Set fso = CreateObject("Scripting.FileSystemObject")
sPartNo = Wscript.Arguments.Item(0)
If sPartNo = "" Then
   Wscript.Echo "No sPartNo parameter was passed"
   Wscript.Quit
End If

Set NewFile = fso.CreateTextFile("FileList.csv", True)
Set folder = fso.GetFolder(".")
Set files = folder.Files
iPartNoLen = Len(sPartNo)

For each folderIdx In files
   sCurFName = folderIdx.Name
   If Left(sCurFName,iPartNoLen) = sPartNo Then
       NewFile.WriteLine(sCurFName)
   End If
Next
NewFile.Close



VBScript 2
On Error Resume Next
Dim fso,folder,files,NewFile,sPartNo,sCurFName,iPartNoLen
Dim iStartPos,iEndPos,iRlen
Dim sRVal

Set fso = CreateObject("Scripting.FileSystemObject")
sPartNo = Wscript.Arguments.Item(0)
If sPartNo = "" Then
   Wscript.Echo "No sPartNo parameter was passed"
   Wscript.Quit
End If

Set NewFile = fso.CreateTextFile("FileList.csv", True)
Set folder = fso.GetFolder(".")
Set files = folder.Files
iPartNoLen = Len(sPartNo)

For each folderIdx In files
   sCurFName = folderIdx.Name
   If Left(sCurFName,iPartNoLen) = sPartNo Then
       sCurFName = UCase(sCurFName)
       iEndPos = InStr(1,sCurFName,".",0) - 1
       iStartPos = InStrRev(sCurFName,"R",iEndPos,0) + 1
       iRLen = iendPos-iStartPos + 1
       sRVal = Mid(sCurFName,iStartPos,iRlen)
       NewFile.WriteLine(sCurFName & "," & sRVal)
   End If
Next
NewFile.Close

Jason Kramer
University Archives and Records Management
002 Pearson Hall
(302) 831 - 3127 (voice)
(302) 831 - 6903 (fax)
On 2/9/2011 4:57 PM, [email protected] wrote:
Jason: I'll certainly look over your vb code in detail later! Love analyzing vb code.

For my situation, there will always be only ONE file out there for each part, never multiple files with different revision numbers (client finally got back to me with that info). And the part number can be both numbers and letters, so there will be multiple R's in the filename (such as: "HammerR3.doc").... For now, a simple while loop incrementing a number from 1 to 30 did the trick. He said that revisions have never historically gone over 10, so we did 30 just to be safe.

 Karen




I may have another solution. I wrote a VBScript file that will get a list of all the files for a given part number, find the revision number, write a CSV file with all the matching file names and revisions, loads the file into a temp table and then selects the max revision. This way, you don't have to worry about maximum revisions. If your customer suddenly decides to start revisions at 1000, you won't be stuck because you were counting backwards from 30. Also, this gives you all revisions in a table so you can offer to show older revisions (depending on how much you like your customer, of course)

This solution depends on the file names always being <partnum>R<revisionnum>.ext. If the file name has more than one R, you will get very odd results.

   Please let me know if you want a sample DB.




Reply via email to