2012-09-18 38 views
3

幫助!出於某種原因,我的功能不能識別所有數據集上的空格。請看下圖:與isspace空間字符識別問題

我使用下面的函數在我的代碼:

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 
+2

有很多字符顯示爲空格。嘗試'A(6)=='''如果它返回false,則將A(6)轉換爲數字以查看它是什麼字符。 – slayton

回答

0

如果在你的輸入A沒有空間,輸出ll不分配。

爲了解決這個問題,你應該添加在你的函數的末尾:

ll=l1;

0

而不是使用isspace還是很有限A(ii) == ' '的,你可以使用條件

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

第一部分會照顧所有非ASCII打印字符(例如,一切都在ASCII空格之前出現),然後isspace將剩餘的沒有照顧打印Unicode字符。

或者,你可以使用

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

和,如奧利已經指出,確保ll獲取所有可能路徑分配。也就是說,如果A = ''(空)或A = char(1)(NULL字符)或A = ' THE_REAL_STRING'(它會回來,因爲領先的空間長度爲1)你的函數將失敗等

此外,你可以向量化整個事情就像這樣:

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

使整個迴路不必要的。