2011-04-05 105 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