This function splits a filename (must be without path name) into the name and the extension 🙂
If the filename has more than one dot, the name and extension is split at the last dot.
The four source members are available in an installation package you can download here. You will get a zip file containing a executable JAR file (requires Java V1.8 or newer). Unzip the JAR file and run it. You will be presented for a series of screen that will install the four members to the file QRPGLESRC in library JWTOOLS. If the library and/or source file does not exist, they will created.
Have fun 🙂
Listing 1, member SPLITFN_PR, type RPGLE:
* * SplitFN_Pr * ---------- * Prototype for split a filename (no path) into name and extension. * d SplitFN Pr d iFileName 100a Const d oName 50a d oExt 50a *
Listing 2, member SPLITFN, type RPGLE:
h NoMain * * SplitFN * ------- * Split a filename (no path) into name and extension. * * Jesper Wachs, August 2016. * * Copymember for exported functions. * ---------------------------------- d/copy qrpglesrc,splitfn_pr * * Exported funtions. * ------------------ * * SplitFN * ------- * Split filename into name and extension. * P SplitFN B Export d SplitFN Pi d iFileName 100a Const d oName 50a d oExt 50a * d X s 3p 0 d Pos s 3p 0 d Len s 3p 0 * * Find last dot. * c EVal X = *Zeros c EVal Pos = *Zeros c EVal oName = *Blanks c EVal oExt = *Blanks * c DoU X = *Zeros * c EVal X = %Scan('.': iFileName: X + 1) c If X <> *Zeros c EVal Pos = X c EndIf * c EndDo * * If dot found, then isolate the name and the extension. * c If Pos > *Zeros * * Isolate name * c If Pos > 1 c EVal oName = %SubSt(iFileName: 1: Pos - 1) c EndIf * * Isolate extension. * c EVal Len = %Len(iFileName) - Pos c If Len > *Zeros c EVal oExt = %SubSt(iFileName: Pos + 1: Len) c EndIf * c Else * * If there is no dot, we put the filename into Name. * c EVal oName = iFileName * c EndIf * c Return * P SplitFN E *
Listing 3, member SPLITFN_EX, type RPGLE:
* * SplitFN_Ex * ---------- * Example program for use of SplitFN() function. * * Jesper Wachs, August 2016. * * * Copymember for imported functions. * ---------------------------------- d/copy qrpglesrc,splitfn_pr * * Work fields. * ------------ d Message s 25 d Reply s 25 d wName s 50 d wExt s 50 * c EVal Message = 'Enter a filename:' c Message Dsply Reply * c CallP SplitFn(Reply: wName: wExt) * c EVal Message = 'Name ....: ' + wName * c Message Dsply * c EVal Message = 'Extension: ' + wExt * c Message Dsply * c EVal Message = 'Press ENTER' * c Message Dsply * c EVal *InLR = *On c Return *
If you have installed Jesper’s ToolBox for IBM i you can use the Make member in Listing 4 to compile the module and the example program.
Listing 4, member SPLITFN_MK, type TXT:
; ; SplitFN_Mk ; ---------- ; MAKE member for SplitFN() module and example program. ; ; Jesper Wachs, August 2016. ; ; ; Variables defined once and used though out make member. ; v &lib jwtools v &srclib jwtools v &debug *source ; ; Check and possibly build LUCase module. ; v &mod splitfn o &srclib &mod *module u &srclib qrpglesrc *file &mod ci dltmod &srclib/&mod c crtrpgmod &srclib/&mod srcfile(&srclib/qrpglesrc) dbgview(&debug) ; ; Check and possibly build LUCase_Ex module. ; v &mod splitfn_ex o &srclib &mod *module u &srclib qrpglesrc *file &mod ci dltmod &srclib/&mod c crtrpgmod &srclib/&mod srcfile(&srclib/qrpglesrc) dbgview(&debug) ; ; Build main program. ; v &pgm splitfn_ex o &lib &pgm *pgm u &srclib splitfn_ex *module u &srclib splitfn *module ci DltPgm &lib/&pgm c CrtPgm &lib/&pgm module(&srclib/&pgm &srclib/splitfn)