2014-04-21 35 views
0

我有一個2列的表。在第1列,我有一個字符串信息,第2欄,我有一個邏輯索引通過檢查第一個字符識別相關的字符串信息

%% Tables and their use 

T={'A2P3';'A2P3';'A2P3';'A2P3 with (extra1)';'A2P3 with (extra1) and (extra 2)';'A2P3 with (extra1)';'B2P3';'B2P3';'B2P3';'B2P3 with (extra 1)';'A2P3'}; 
a={1 1 0 1 1 0 1 1 0 1 1 } 

T(:,2)=num2cell(1); 
T(3,2)=num2cell(0); 
T(6,2)=num2cell(0); 
T(9,2)=num2cell(0); 

T=table(T(:,1),T(:,2)); 

class(T.Var1); 
class(T.Var2); 

T.Var1=categorical(T.Var1) 
T.Var2=cell2mat(T.Var2) 

class(T.Var1); 
class(T.Var2); 

if T.Var1=='A2P3' & T.Var2==1 
    disp 'go on' 
else 
    disp 'change something' 
end 

更新:只要我知道如何複製我的

  • 我會更新這個節工作區爲代碼格式

**仍然不知道該怎麼做,但這裏有雲

***爲什麼WOR國王與表是一把雙刃劍(但仍然很酷):我必須非常清楚表中的類,以便在if else結構中引用它,在這裏我必須將兩列轉換爲分類並從單元格中加倍使它工作...

這裏是我的數據是這樣的:

http://imgur.com/H2exXKO

我想有這樣的:

if T.Var1=='A2P3*************************' & T.Var2==1 
    disp 'go on' 
else 
    disp 'change something' 
end 

我設法告訴matlab做,因爲我希望,但這篇文章的重點是:我如何告訴matlab忽略字符串中A2P3之後的內容,其中字符串長度是可變的?因爲否則查找A2P3(以及B2P3等)上留下的每一個字符串信息只是說泰語會非常累人。

我該怎麼做?

+0

我們是否可以假設有2列,而不是一個單元陣列? – Divakar

+0

我可以但它會讓我更難將其轉換回原始表結構。你的建議怎麼樣? 我對各種長度的通配符特別感興趣,可以說「abc在abc11one中很重要」。所以如果abc在第一部分,它已經可以了。 – Easyquestionsonly

+0

用於查找表格中的文本使用分類,但我好奇abotu在這種情況下通配符的實現。 – Easyquestionsonly

回答

1

假設你與T(單元陣列)的工作在你的代碼中列出,您可以使用此代碼來檢測成功匹配 -

%%// Slightly different than yours 
T={'A2P3';'NotA2P3';'A2P3';'A2P3 with (extra1)';'A2P3 with (extra1) and (extra 2)';'A2P3 with (extra1)';'B2P3';'B2P3';'NotA2P3';'B2P3 with (extra 1)';'A2P3'}; 
a={1 1 0 1 1 0 1 1 0 1 1 } 

T(:,2)=num2cell(1); 
T(3,2)=num2cell(0); 
T(6,2)=num2cell(0); 
T(9,2)=num2cell(0); 

%%// Get the comparison results 
col1_comps = ismember(char(T(:,1)),'A2P3') | ismember(char(T(:,1)),'B2P3'); 
comparisons = ismember(col1_comps(:,1:4),[1 1 1 1],'rows').*cell2mat(T(:,2)) 
+0

,適合我。非常聰明,只比較第一個字符,讓其他人爲0.我喜歡如何模塊化它可以適應也使用前6個字符等很多謝謝! – Easyquestionsonly

+0

@Easyquestionsonly乾杯隊友!很高興這次它的工作! – Divakar

0

一個快速的解決方案是創建一個函數,該函數需要2個字符串並檢查第一個字符串是否從第二個字符串開始。

後來編輯:

功能將是這樣的:

for i = 0, i < second string's length, i = i + 1 
    if the first string's character at index i doesn't equal the second string's character at index i 
     return false 
after the for, return true 

此假設第二個字符的lenght總是較小第一的。否則,返回交換參數的函數。

+0

怎麼樣?琴絃並不總是等長。這就是我要找的,可以有任何長度的某種通配符。 – Easyquestionsonly

+0

我剛剛編輯了我的答案。 – Valdrinit

+0

謝謝,但即時通訊尋找的不是我的字符串的簡單長度分類器,即時通訊嘗試忽略具有相同開始的太長字符串。我更新了我的第一個問題。 – Easyquestionsonly

相關問題