3

帮助!出于某种原因,我的功能不是在所有数据集上识别空间。见下文:

我在我的代码中使用以下函数:

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
4

2 回答 2

0

如果输入中没有空格,则不会分配A输出。ll

要解决该问题,您应该在函数末尾添加:

ll=l1;

于 2012-09-19T01:45:26.273 回答
0

您可以使用条件,而不是使用isspace或更有限的A(ii) == ' '

A(ii) <= ' ' || isspace(A(ii))

第一部分将处理所有非打印 ASCII 字符(例如,在空格之前的所有 ASCII 字符),isspace然后处理剩余的非打印 Unicode 字符。

或者,您可以使用

if ~isletter(A(ii)), break; end

并且,正如 Oli 已经指出的那样,确保在所有可能的路径ll中分配。意思是,如果(空)或(NULL 字符)或(由于前导空格它将返回长度 1)等,您的函数将失败。A = ''A = char(1)A = ' THE_REAL_STRING'

此外,您可以像这样对整个事物进行矢量化:

ll = find(A <= ' ' | isspace(A), 1);

使整个循环变得不必要。

于 2012-09-19T10:23:03.833 回答