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

isspaceorを使用する代わりに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 に答える