2011-04-05 44 views
1

我想讀取一個文本文件(使用matlab),其數據不是方便的matlab矩陣形式。這是一個例子:在文本文件中讀取並使用MATLAB組織線條

{926377200,926463600} 

[(48, 13), (75, 147), (67, 13)] 

{926463600,926550000} 

[(67, 48)] 

{926550000,926636400} 

[] 

{926636400,926722800} 

[] 
{926722800,926809200} 
... 

我想要的是所有的數字,用逗號分隔的矢量。隨着它們總是成對的,奇數行的數字每次都是更大的數量,這可以通過稍後的邏輯來區分。

我想不出如何使用textscan或其他方法。是什麼讓這有點棘手呢,matlab方法需要爲定界符分隔的字符串定義格式,偶數行的整數對數量不限。

+0

可以字符串標記(「strtok」)不能使用?文本文件如何被饋送到分詞器?謝謝 – Vass 2011-04-05 22:22:41

回答

2

你可以用textscan來做到這一點。您只需要將空格指定爲{}等。

例如,如果你把你的樣本數據到文件tmp.txt(在當前目錄),並運行以下命令:

fid = fopen('tmp.txt','r'); 
if fid > 0 
    numbers = textscan(fid,'%f','whitespace','{,}[]() '); 
    fclose(fid); 
    numbers = numbers{:} 
end 

你應該看到

numbers = 

    926377200 
    926463600 
      48 
      13 
      75 
     147 
      67 
      13 
    926463600 
    926550000 
      67 
      48 
    926550000 
    926636400 
    926636400 
    926722800 
    926722800 
    926809200 
+0

謝謝你。它效果很好。只有一件事,我因爲某種原因在向量的末尾得到了浮點數的蹤跡;有什麼想法爲什麼? – Vass 2011-04-08 12:36:36

1

只需遍歷每個字符。 (使用fscanf或fread或其他)。如果該字符是一個數字(使用str2num),則將其存儲爲一個數字,如果該數字不是數字,則丟棄它並在遇到下一個數字時開始存儲新數字。

+0

但fscanf需要一個格式的字符串。我對如何使用它甚至逐字掃描字符有點困惑,怎麼做?謝謝 – Vass 2011-04-05 21:57:56

+1

fscanf(fid,'%s')。這會給你一個輸出,把所有的字符放在一個長向量中。然後,只需編寫一個m文件來遍歷每個描述上面操作的元素。 – umps 2011-04-06 02:25:56