2015-11-02 60 views
0

我需要決定需要多少個子圖和它們的大小,並將所有信息存儲在一個字符串中。Matlab:基於指定尺寸的字符串的嗶嗶聲數量

比方說,有四個分支情節和它們的尺寸:

頂:1x1的 下一頁:2× 下一頁:2× 底部:1x1的

基本上中間兩個是兩個組合對。通常情況下,以下我會指定的次要情節:

subplot(6,1,1) 
subplot(6,1,[2:3]) 
subplot(6,1,[4:5]) 
subplot(6,1,6) 

現在,這個信息被存儲在一個字符串,如下圖所示:

'1;[2:3];[4:5];6' 

所以,問題是什麼是得到的最有效的方法來自這種字符串的軸信息。

我可以,當然,檢查每個字符的字符串無論是',',​​3210,'['':',或']'。這將需要換循環,從而length(str)和許多if語句,削皮'['':'']',問「是字符的數字?」,「是冒號,然後呢?」等,這是非常乏味的。

我有幾萬數字與次要情節等,我只能認爲有一定是這樣做的更好的方法。

+3

兒子,你擁有屬於自己的分析問題。沒有簡單的方法,你必須解析自己的一些字符串。編寫解析器對於我們老年人來說不是太難。你年輕的可能永遠不會讀龍書,所以對你來說好運。 Flex和Yacc看起來像是爲了解決你的問題。你很可能可以從strsplit和if語句的parsel中得到你想要的。 – John

+0

如何使用'strsplit'提取情節指數即'1','[2:3]','[4:5]','6'? –

+1

魔術! strsplit正是我想要的。我如何選擇你的答案?如果您發佈答案而不是答覆,我會選擇它作爲答案。 – Eric

回答

1

假設字符串存儲在str

str='1;[2:3];[4:5];6' 
splits=strsplit(str,';'); 
splits=cellfun(@str2num,splits,'uni',0); 
for i=1:numel(splits) 
    subplot(numel(splits),1,splits{i}); 
    %plot 
end 
+1

Ooooh,我不知道'str2num'可以通過matlab的矢量語法來解析:)完美,謝謝!這是*正確的做法。 –

+0

解析是什麼意思?我想學習。我確實看到str2num的行爲與str2double的行爲不同 – Eric

+0

@Eric我建議下次添加一個名爲「@」的名稱,以通知我您的評論(這稱爲「pinging」一個用戶,我剛剛與您做過)。通過「*解析通過matlab的矢量語法*」我只是說,如果你給它'v = str2num('4:6');'它會評估它爲'v = 4:6;',我沒有實現。我認爲它只能轉換文字數字值,但更適合。例如,你可以使用'M = str2num('[2 4; 3 6]');'定義一個矩陣(這非常酷)。 –