2014-10-01 46 views
-1

有人能告訴我如何使用Matlab將字符數組轉換爲格式化輸出?Matlab:如何將字符數組或字符串轉換爲格式化輸出或解析字符串

我期待的數據是這樣的:

CHAR (1 x 29) : 0.050822999 3.141592979 ; (1) 

OR

CELL (1 x 1) or string: '0.050822999  3.141592979 ; (1)' 

我要找的輸出是這樣的:

d1 = 0.050822999; %double 
d2 = 3.141592979; %double 
index = 1; % integer 

我試着換位,然後用str2num(海峽「);但是,它返回給我0x 0雙。

任何幫助,將不勝感激。

問候, DK

+1

請提供與實施例的輸出的示例字符數組...或者是這些輸入?如果他們不是說'CELL(1 x 1):...',可以更清楚地說'Str = {'0.050822999 3.141592979}',然後提供您期望的格式化輸出 – Dan 2014-10-01 06:37:08

+1

您輸入的是什麼使用? – Nick 2014-10-01 07:01:28

回答

3

可以使用regexp解析字符串

c = { '0.050822999 3.141592979 ; (1)' }; 
p = regexp(c{1}, '^(\d+\.\d+)\s(\d+\.\d+)\s*;\s*\((\d+)\)$', 'tokens', 'once'); %//parse the input string 
numbers = str2mat(p); %// convert extracted strings to numerical values 

結果示例

ans = 
0.050822999 
3.141592979 
1   

在解釋regexp模式:

  • ^ - PATT ERN開始於輸入字符串
  • (\d+\.\d+)的開始 - 括號('()')包圍此子模式指示它作爲一個單一令牌
    \d+匹配一個或多個數字,則期待\.點(注意\,由於.在正則表達式中單獨用作通配符)並且在點\d+之後期望一個或多個數字。
    此令牌應該對應於第一數量,例如,0.050822999
  • \s
  • (\d+\.\d+)期待一個單一的空間 - 再次,期待另一個小數作爲第二令牌。
  • \s* - 期待空白(零或更多)。
  • ; - 在表達式中捕獲;,但不是作爲標記。
  • \s+ - 期待空白(零或更多)。
  • \( - 期待左括號,請注意\,因爲正則表達式中的括號用於表示令牌。
  • (\d+) - 期待一個或多個數字作爲第三個標記,這裏只需要整數。沒有小數點。
  • \) - 期待一個右括號。
  • $ - 模式應該到達輸入字符串的末尾。
+0

謝謝。那工作。你能否請你解釋正則表達式中的模式? – 2014-10-01 13:06:58

+0

@DushyantKumar請參閱我的更新。 – Shai 2014-10-01 17:51:38

+0

感謝您解釋模式。 – 2014-10-02 07:18:36

2

您可以使用這樣的事情(如果我理解正確的你)

function str_dump(var) 
    info = whos; 
    disp([info.class ' ' mat2str(info.size) ' : ' var]); 
end 

這只是顯示了關於字符串信息。如果你想解析它並轉換爲另一個Matlab的結構,你必須更仔細地解釋它。

+1

如果可以避免使用'eval',那麼應該這樣做,因爲調試是一件非常可怕的事情。 – Nick 2014-10-01 07:00:43

+0

@Nick我已經修復它..從其他東西離開) – Cheery 2014-10-01 07:01:11

+0

這是更好:) – Nick 2014-10-01 07:02:13

2
%// Input 
a = [0.050822999 3.141592979]; 
n = 1; 

%// Output 
str = [num2str(a,'%0.9f ') ' ; (' num2str(n) ')'] 

結果:

str = 
0.050822999 3.141592979 ; (1) 
相關問題