无法使用isspace标识空间字符

时间:2012-09-18 21:56:45

标签: matlab removing-whitespace

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

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

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

1 个答案:

答案 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);

不需要整个循环。