帮助!出于某种原因,我的功能是不识别所有数据集上的空格。见下文:
我在我的代码中使用以下函数:
function [ll]=f_get_length(A)
l1=length(A);
for ii=1:l1
if A(ii) == ' '
ll=ii;
break
end
end
但是我找到了一个数据集,它给出了以下错误:
Error in ==> f_get_length at 3
l1=length(A);
??? Output argument "ll" (and maybe others) not assigned during call to
"/home/geovault-01/abutcher/scripts/meghans_codes/SdP_codes/3DKirchhof/f_get_length.m>f_get_length".
Error in ==> process_sacdataSP10_PICASSO at 62
ll=f_get_length(SS);
当我试图找出问题时,我发现在使用isspace
时空间没有被识别为空格,但以下证明第4个字符后面有空格:
strtrim(A)
ans =
CAVN
length(A)
ans =
8
display(['test' A(6) 'test'])
test test
display(['test' A(5) 'test'])
test test
display(['test' A(4) 'test'])
testNtest
display(['test' A(7) 'test'])
test test
display(['test' A(8) 'test'])
test test
length(A)
ans =
8
strtrim(A)
ans =
CAVN
length(A)
ans =
8
isspace(A(6))
ans =
0
isspace(A)
ans =
0 0 0 0 0 0 0 0
答案 0 :(得分:0)
您可以使用条件
,而不是使用isspace
或更有限的A(ii) == ' '
。
A(ii) <= ' ' || isspace(A(ii))
第一部分将处理所有非打印ASCII字符(例如,空格之前的所有ASCII字符),然后isspace
将处理剩余的非打印Unicode字符。
或者,您可以使用
if ~isletter(A(ii)), break; end
并且,正如Oli已经指出的那样,确保ll
在所有可能的路径中分配 。意思是,如果A = ''
(空)或A = char(1)
(空字符)或A = ' THE_REAL_STRING'
(由于前导空格将返回长度1),您的函数将失败,等等。
此外,您可以像这样对整个事物进行矢量化:
ll = find(A <= ' ' | isspace(A), 1);
不需要整个循环。