source: trunk/MESOSCALE/PLOT/MINIMAL/fsc/fsc_base_filename.pro @ 205

Last change on this file since 205 was 85, checked in by aslmd, 14 years ago

LMD_MM_MARS et LMD_LES_MARS: ajout des routines IDL pour tracer les sorties --> voir mesoscale/PLOT

File size: 6.5 KB
Line 
1;+
2; NAME:
3;    FSC_BASE_FILENAME
4;
5; PURPOSE:
6;
7;    The purpose of this is to extract from a long file path, the
8;    base file name. That is, the name of the actual file without
9;    the preceeding directory information or the final file extension.
10;    The directory information and file extension can be obtained via
11;    keywords. The file is named so as not to interfere with FILE_BASENAME,
12;    which was introduced in IDL 6.0 and performs a similar function.
13;
14; AUTHOR:
15;
16;   FANNING SOFTWARE CONSULTING
17;   David Fanning, Ph.D.
18;   1645 Sheely Drive
19;   Fort Collins, CO 80526 USA
20;   Phone: 970-221-0438
21;   E-mail: davidf@dfanning.com
22;   Coyote's Guide to IDL Programming: http://www.dfanning.com/
23;
24; CATEGORY:
25;
26;    Utility.
27;
28; CALLING SEQUENCE:
29;
30;    baseFilename = FSC_Base_Filename(thePath)
31;
32; INPUTS:
33;
34;    thePath:      This is the file path you wish to extract a base file name from.
35;                  It is a string variable of the sort returned from Dialog_Pickfile.
36;
37; KEYWORDS:
38;
39;    DIRECTORY:      The directory information obtained from the input file path.
40;                    The directory always ends in a directory separator character.
41;
42;    EXTENSION:      The file extension associated with the input file path.
43;
44;    PATH_SEPARATOR: The string to use as a path separator. If undefined, the output
45;                    of PATH_SEP() will be used.
46;
47; RETURN_VALUE:
48;
49;    baseFilename:   The base filename, stripped of directory and file extension information.
50;
51; RESTRICTIONS:
52;
53;    This is a quick and dirty program. It has been tested on Windows machines and *lightly*
54;    tested on UNIX machines. Please contact me at the e-mail address above if you discover
55;    problems.
56;
57; EXAMPLE:
58;
59;    IDL> thePath = "C:\rsi\idl7.8\lib\jester.pro"
60;    IDL> Print, FSC_Base_Filename(thePath, Directory=theDirectory, Extension=theExtension)
61;         jester
62;    IDL> Print, theDirectory
63;         C:\rsi\idl7.8\lib\
64;    IDL> Print, theExtension
65;         pro
66;
67;
68; MODIFICATION HISTORY:
69;
70;    Written by: David W. Fanning, 31 July 2003.
71;    Modified by KaRo, 13 Feb. 2005 to allow dots in the filename.
72;    Added PATH_SEPARATOR keyword. 25 July 2005. DWF.
73;    Added ability to recongnize directory by path separator in last character. 19 Sept 2005. DWF.
74;-
75;###########################################################################
76;
77; LICENSE
78;
79; This software is OSI Certified Open Source Software.
80; OSI Certified is a certification mark of the Open Source Initiative.
81;
82; Copyright © 2003-2005 Fanning Software Consulting
83;
84; This software is provided "as-is", without any express or
85; implied warranty. In no event will the authors be held liable
86; for any damages arising from the use of this software.
87;
88; Permission is granted to anyone to use this software for any
89; purpose, including commercial applications, and to alter it and
90; redistribute it freely, subject to the following restrictions:
91;
92; 1. The origin of this software must not be misrepresented; you must
93;    not claim you wrote the original software. If you use this software
94;    in a product, an acknowledgment in the product documentation
95;    would be appreciated, but is not required.
96;
97; 2. Altered source versions must be plainly marked as such, and must
98;    not be misrepresented as being the original software.
99;
100; 3. This notice may not be removed or altered from any source distribution.
101;
102; For more information on Open Source Software, visit the Open Source
103; web site: http://www.opensource.org.
104;
105;###########################################################################
106
107
108FUNCTION FSC_Base_Filename, filename, $
109   Directory=directory, $
110   Extension=extension, $
111   Path_Separator=pathsep
112
113   On_Error, 2
114
115   ; Default values.
116   directory = ""
117   extension = ""
118   file = ""
119
120   ; If there is no filename, return NULL.
121   IF (N_Elements(filename) EQ 0) OR (filename EQ "") THEN RETURN, file
122
123   ; Is a path separator specified?
124   IF N_Elements(pathsep) EQ 0 THEN pathsep = Path_Sep()
125
126   ; If the last element of filename is a path separator, then separation is easy.
127   IF StrMid(filename, StrLen(filename)-1, 1) EQ pathsep THEN BEGIN
128      directory = filename
129      RETURN, file
130   ENDIF
131
132   ; Split the file by the path separator and extract into parts.
133   parts = StrSplit(filename, pathsep, /Extract)
134   IF StrMid(filename, 0, 1) EQ pathsep AND N_Elements(parts) GT 1 THEN parts[0] = pathsep + parts[0]
135   numParts = N_Elements(parts)
136
137   ; Put the parts back together after identifying them.
138   CASE numParts OF
139      1: BEGIN
140            subparts = StrSplit(filename, ".", /Extract)
141            numsubParts = N_Elements(subparts)
142            CASE numsubParts OF
143               1: file = subparts[0]
144               2: BEGIN
145                     file = subparts[0]
146                     extension = subparts[1]
147                  END
148               ELSE: BEGIN
149                     file = StrJoin(subparts[0:numsubParts-2],'.')
150                     extension = subparts[numsubParts-1]
151                  END
152            ENDCASE
153         END
154
155      2: BEGIN
156            file = parts[1]
157            directory = parts[0] + pathsep
158            subparts = StrSplit(file, ".", /Extract)
159            numsubParts = N_Elements(subparts)
160            CASE numsubParts OF
161               1: file = subparts[0]
162               2: BEGIN
163                     file = subparts[0]
164                     extension = subparts[1]
165                  END
166               ELSE: BEGIN
167                     file = StrJoin(subparts[0:numsubParts-2],'.')
168                     extension = subparts[numsubParts-1]
169                  END
170            ENDCASE
171         END
172
173      ELSE: BEGIN
174
175            file = parts[numParts-1]
176            subparts = StrSplit(file, ".", /Extract)
177            numsubParts = N_Elements(subparts)
178            CASE numsubParts OF
179               1: file = subparts[0]
180               2: BEGIN
181                     file = subparts[0]
182                     extension = subparts[1]
183                  END
184               ELSE: BEGIN
185                     file = StrJoin(subparts[0:numsubParts-2],'.')
186                     extension = subparts[numsubParts-1]
187                  END
188            ENDCASE
189            directory = parts[0]
190            FOR j=1,numParts-2 DO BEGIN
191               directory = directory + pathsep + parts[j]
192            ENDFOR
193            directory = directory + pathsep
194         END
195
196   ENDCASE
197
198   RETURN, file
199
200END
201
Note: See TracBrowser for help on using the repository browser.