source: trunk/SRC/Utilities/isafile.pro @ 192

Last change on this file since 192 was 163, checked in by navarro, 18 years ago

header improvements : type of parameters and keywords, default values, spell checking + idldoc assistant (IDL online_help)

  • Property svn:keywords set to Id
File size: 4.1 KB
RevLine 
[2]1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
[128]5; @file_comments
6; same as find.pro except that as long as the file is 'NOT FOUND',
7; isafile calls dialog_pickfile, to ask the user to select a file.
[2]8;
[93]9; @categories io
[2]10;
[163]11; @param FILEIN {in}{optional}
[136]12; a proposed name. If neither filein input parameter of filename keyword are
13; defined, the ask the user to choose a file.
[2]14;
[136]15; @keyword FILENAME
16; a proposed filename.
[2]17;
[136]18; @keyword IODIRECTORY
19; a directory where we look for the file. this
20; keyword is taken into account only if the dirname
21; of filein or filename is '.'
[11]22;
[136]23; @keyword NEW
24; to specify that filename is a new file and that we should check only its
25; path
[11]26;
[136]27; @keyword ONLYPRO
28; force to look only at file ending with .pro
[69]29;
[136]30; @keyword ONLYNC
31; force to look only at file ending with .nc
[69]32;
[136]33; @keyword RECURSIVE
34; performs recursive searching of directory hierarchies.
35; In a recursive search, find looks recursively for any and all
36; subdirectories in the file hierarchy rooted at the IODIRECTORY argument.
[11]37;
[136]38; @keyword _EXTRA
39; used to pass your keywords
[118]40;
[136]41; @file_comments
42; all find, file_search and dialog_pickfile keywords (like title) can be used
[11]43;
[136]44; @returns
45; the filename with its path
[11]46;
[128]47; @examples
[2]48;
[128]49; IDL> print, isafile('/Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro')
[11]50;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
[128]51; IDL> print, isafile('cm_4mesh.pro', iodir = '/Users/sebastie/SAXO_RD/Commons')
[11]52;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
[128]53; IDL> print, isafile('cm_4mesh.pro', iodir = !path)
[11]54;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
[128]55; IDL> print, isafile('cm_4mesh.pro', iodir = '/Users/sebastie/SAXO_RD', /recursive)
[11]56;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
[128]57; IDL> print, isafile('cm_4mesh.pro', iodir = getenv('HOME'), /recursive)
[11]58;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
[128]59; IDL> print, isafile('fake_file.pro')
[11]60;
[93]61; @history Sebastien Masson (smasson\@lodyc.jussieu.fr)
[2]62;                      11/2/2000
[11]63; June 2005: Sebastien Masson: cleaning, use for file_* functions
[118]64;
65; @version $Id$
[2]66;-
67;------------------------------------------------------------
68;------------------------------------------------------------
69;------------------------------------------------------------
[11]70FUNCTION isafile, filein, FILENAME = filename, IODIRECTORY = iodirectory $
[69]71                  , NEW = new, RECURSIVE = RECURSIVE, ONLYPRO = onlypro $
72                  , ONLYNC = onlync, _extra = ex
[2]73;------------------------------------------------------------
[114]74;
75  compile_opt idl2, strictarrsubs
76;
[11]77  CASE 1 OF
78    (size(filein, /type))[0] EQ 7:fileout = filein
[114]79    keyword_set(filename):fileout = filename[0]
[11]80    ELSE:fileout = 'file that is not existing'
81  ENDCASE
82  if size(fileout, /type) NE 7 THEN return, -1
83;
[69]84  CASE 1 OF
85    keyword_set(onlypro): filter = '*.pro'
86    keyword_set(onlync): filter = '*.nc'
87    else: filter = '*'
88  ENDCASE
89;
[11]90  basename = file_basename(fileout)
91  dirname = file_dirname(fileout)
92; should we redefine dirname?
93  if keyword_set(iodirectory) AND dirname EQ '.' then dirname = iodirectory
94;
95  if keyword_set(new) then return, dirname + path_sep() + basename
96;
97  fileout = find(basename, iodirectory = dirname $
[69]98                 , recursive = recursive, /unique, /firstfound, ONLYPRO = onlypro $
99                 , ONLYNC = onlync, _extra = ex)
[11]100  WHILE fileout[0] EQ 'NOT FOUND' DO BEGIN
[69]101    fileout = dialog_pickfile(path = dirname[0], filter = filter, _extra = ex)
[11]102    if fileout EQ '' THEN RETURN, report('check/find file canceled')
103; check again everything...
104    basename = file_basename(fileout)
105    dirname = file_dirname(fileout)
106; check if the name of the dirname is ok
107    dirname = isadirectory(dirname, title = 'choose a directory for the file ' $
108                           + basename)
109; if we cancel the check
110    IF size(dirname, /type) NE 7 THEN return, report('check/find file canceled')
111    fileout = find(basename, iodirectory = dirname $
[69]112                   , recursive = recursive, /unique, /firstfound, ONLYPRO = onlypro $
113                   , ONLYNC = onlync, _extra = ex)
[11]114  ENDWHILE
115;
116  RETURN, fileout
117END
Note: See TracBrowser for help on using the repository browser.