Modified PSplit.e drive/dir/name/ext spliter, still 1 prob, help.
- Posted by Al Taylor <alt at HARE.NET.AU> Sep 05, 1997
- 696 views
Someone sent PSplit.e to the mailing list after i made a request. I've corrected some bugs, and listed what I couldn't easily fix. If someone can fix the commented bug, please send the code to this list, thanks. -- PSplit.e modified to correctly process root dir and -- filenames without an extension. Most mod's are --'ed -- I didn't write the original PSplit. -- Test code at end uses command line. -- Still doesn't find the correct drive/dir/fn/ext for -- "D:filename.ext" or "D:" , Need interrupt or function -- to get current dir/path of 'D:' --BUG-- with trace trace(0) include file.e global constant -- elements of returned sequence PSplit_DRIVE = 1, PSplit_DIRECTORY = 2, PSplit_FILENAME = 3, PSplit_EXTENSION = 4 global function PSplit(sequence Path) -- Split a full path name to Drive, Directory, FileName and Extension atom Drive sequence Directory, FileName, Extension, ReturnValue atom Pos, Len sequence CurDir CurDir = current_dir() Pos = find(':',Path) if Pos > 0 then Drive = Path[Pos-1] Path = Path[Pos+1..length(Path)] else Drive = CurDir[1] end if Len = length(Path) Directory = "" for ix = Len to 1 by -1 do if compare(Path[ix],'\\') = 0 then if ix != 1 then -- if dir is not root Directory = Path[1..ix-1] Path = Path[ix+1..length(Path)] exit else Directory = Path[1..ix] -- dir is root. dir = \ Path = Path[ix+1..length(Path)] end if end if if compare(Path[ix], ':') = 0 then Directory = CurDir[3..length(CurDir)] -- needed? exit end if end for if compare(Directory, "") = 0 then Directory = CurDir[3..length(CurDir)] end if if compare(Directory, "\\") = 0 then -- fix dir = \ Directory = "" -- ok to append "\" now end if Len = length(Path) FileName = "" Extension = "" if match(".",Path) != 0 then -- does extension exist? for ix = Len to 1 by -1 do if compare(Path[ix], '.') = 0 then FileName = Path[1..ix-1] Extension = Path[ix+1..length(Path)] exit end if end for else FileName = Path[1..Len] -- no ext, so ignore '.' end if ReturnValue = {Drive, Directory, FileName, Extension} return ReturnValue end function -- program to test global function PSplit(x) below object s sequence cmd_line cmd_line = command_line() if length(cmd_line) < 3 then cmd_line = cmd_line & {""} end if s = PSplit(cmd_line[3]) puts(1,"\n Drive: " & s[PSplit_DRIVE]) puts(1,"\nDirectory: " & s[PSplit_DIRECTORY]) puts(1,"\n Filename: " & s[PSplit_FILENAME]) puts(1,"\nExtension: " & s[PSplit_EXTENSION] & "\n")