3

MATLAB 对调用函数是区分大小写的,即使在 Windows 上也是如此:

>> edit Untitled
>> untitled
Cannot find an exact (case-sensitive) match for 'untitled'

有没有办法在 Windows 上为其他功能(如加载)强制区分大小写?

>> a = 3;
>> save a a
>> load A

问题是这段代码在 Windows 上运行良好,但如果我将它发送给 Unix 上的朋友会出错。

4

1 回答 1

1

无论您运行的平台如何,对处理文件的函数强制区分大小写的一种方法是为此类函数编写一个包装器。

例如,在 的情况下load,我想出了以下直接替换:

function varargout = myload(fname, varargin)
    % make sure filename ends with MAT extension
    [~,~,ext] = fileparts(fname);
    if isempty(ext), fname = [fname '.mat']; end

    % open file (searching entire MATLAB path)
    fid = fopen(fname,'r');
    if fid < 0, error('file not found'); end

    % get fullpath to opened file, and close file handle
    filename = fopen(fid);
    fclose(fid);

    % extract the filename
    [~,name,ext] = fileparts(filename);
    filename = [name ext];

    % compare against original name (case-sensitive)
    if ~strcmp(fname,filename)
        error('Cannot find an exact (case-sensitive) match for file');
    end

    % load the MAT-file
    S = load(fname, varargin{:});

    % assign output
    if nargout > 0
        varargout{1} = S;
    else
        fn = fieldnames(S);
        for i=1:numel(fn)
            assignin('caller', fn{i}, S.(fn{i}))
        end
    end
end

在上面的实现中我可能错过了一些案例,但你明白了..

于 2013-08-07T20:32:57.363 回答