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
您需要获取文件名列表(通过 readdir
、dir
、ls
),然后在该列表中搜索字符串。如果使用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]*')
我在 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
您需要获取文件名列表(通过 readdir
、dir
、ls
),然后在该列表中搜索字符串。如果使用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]*')