读取文本文件并使用MATLAB按行组织

时间:2011-04-05 18:55:14

标签: matlab text file-io

我想在文本文件(使用matlab)中读取数据,该数据不是方便的matlab矩阵形式。这是一个例子:

{926377200,926463600}

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

{926463600,926550000}

[(67, 48)]

{926550000,926636400}

[]

{926636400,926722800}

[]
{926722800,926809200}
...

我想要的只是用逗号分隔的所有数字的向量。由于它们总是成对出现,而奇数行的数字每次都要大得多,这可以通过逻辑稍后区分。

我无法弄清楚如何使用textscan或其他方法。这有点棘手的是matlab方法需要为由分隔符分隔的字符串定义格式,这里偶数行具有非限制数量的整数对。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

只需遍历每个角色。 (使用fscanf或fread或其他)。如果字符是数字(使用str2num),则将其存储为数字,如果不是数字,则丢弃它并在遇到下一个数字时开始存储新数字。