dir 区分大小写输入的解决方法

Workaround for case-sensitive input to dir

我在 Windows 10 (x64) 上使用 Octave 5.1.0。我正在解析一系列目录,在每个目录中寻找文件名中包含 "logbook" 的 Excel 电子表格。问题是这些文件是手工创建的,文件命名不一致:有时是 "LogBook",有时是 "logbook",等等...

看起来作为输入传递给 dir 函数的字符串区分大小写,因此如果我没有正确的大小写,dir returns 一个空结构。目前,我正在使用以下解决方法,但我想知道是否有更好的方法(首先我没有捕获所有可能的 upper/lower 案例组合):

logbook = dir('*LogBook.xls*');
if isempty(logbook)
  logbook = dir('*logbook.xls*');
  if isempty(logbook)
    logbook = dir('*Logbook.xls*');
    if isempty(logbook)
      logbook = dir('*logBook.xls*');
      if isempty(logbook)
        error(['Could not find logbook spreadsheet in ' dir_name '.'])
      end
    end
  end
end

您需要获取文件名列表(通过 readdirdirls),然后在该列表中搜索字符串。如果使用readdir,可以这样:

[files, err, msg] = readdir ('.'); # read current directory
if (err != 0)
  error ("failed to readdir (error code %d): %s", msg);
endif
logbook_indices = find (cellfun (@any, regexpi (files, 'logbook'));
logbook_filenames = files(logbook_indices);

一个不太标准的方法可能是:

glob ('*[lL][oO][gG][bB][oO][kK]*')