フィルターのクリア

Info

この質問は閉じられています。 編集または回答するには再度開いてください。

Create a function which returns values into input variables in a single call.

1 回表示 (過去 30 日間)
bbb_bbb
bbb_bbb 2018 年 5 月 3 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
For example, given a function:
function str=addslash(str) % add slash to a directory name
if str(end)~='\', str(end+1)='\'; end
end
Then I call it for a couple of directories:
dir1=addslash(dir1);
dir2=addslash(dir2);
dir3=addslash(dir3);
...
How to rearrange the function, in order to call it with one statement like this (number of input arguments may vary):
addslash(dir1, dir2, dir3, ...);
or like this:
addslash('dir1', 'dir2', 'dir3', ...); % dir1, dir2, dir3... are names of variables
  5 件のコメント
bbb_bbb
bbb_bbb 2018 年 5 月 3 日
i.e. strcmp(dir1,dir2);
Stephen23
Stephen23 2018 年 5 月 3 日
If you just want to compare the paths, then removing the trailing file separator character would be simpler. See my answer.

回答 (2 件)

KSSV
KSSV 2018 年 5 月 3 日
function nargin=addslash(varargin) % add slash to a directory name
N = length(varargin) ;
nargin = cell(N,1) ;
for i = 1:N
str = varargin{i} ;
if str(end)~='\'
str(end+1)='\';
end
nargin{i} = str ;
end
  2 件のコメント
bbb_bbb
bbb_bbb 2018 年 5 月 3 日
編集済み: bbb_bbb 2018 年 5 月 3 日
The problem is, how to write the results back to the input variables?
Guillaume
Guillaume 2018 年 5 月 3 日
@KSSV, that nargin should be varargout.
@bbb_bbb, The problem is, how to write the results back to the input variables?
If you need to do that, you've gone wrong in the design of your code. Clearly, since you want to apply the same code to multiple variables that means that these variables are related in some way. Therefore, you shouldn't have multiple variables but just one variable that holds the content of all these variables, an array, cell array, whatever container you want. the problem then goes away, just loop over the content of that container.
A very simple rule: If you number variables, stop, you're doing it wrong.
Stephen had a very valid point in the last part of his comment

Stephen23
Stephen23 2018 年 5 月 3 日
編集済み: Stephen23 2018 年 5 月 3 日
This will work on one single string or char vector, or on a cell array of them:
C = strcat(regexprep(C,'\\$',''),'\')
You can easily define a function handle for it:
addslash = @(C) strcat(regexprep(C,'\\$',''),'\');
Which makes calling it trivial:
>> addslash('hello')
ans = hello\
>> addslash('world\')
ans = world\
>> C = addslash({'ab','cd\','ef\gh'});
>> C{:}
ans = ab\
ans = cd\
ans = ef\gh\
EDIT: For your usecase, it would be simpler to remove the trailing slash:
strcmpi(regexprep(A,'\\$',''),regexprep(B,'\\$',''))

この質問は閉じられています。

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by