用MATLAB读取文本文件并逐行组织

用MATLAB读取文本文件并逐行组织,matlab,text,file-io,Matlab,Text,File Io,我想读取一个文本文件(使用matlab),其中包含的数据不是方便的matlab矩阵形式。这是一个例子: {926377200,926463600} [(48, 13), (75, 147), (67, 13)] {926463600,926550000} [(67, 48)] {926550000,926636400} [] {926636400,926722800} [] {926722800,926809200} ... 我想要的是一个由逗号分隔的所有数字组成的向量。由于它们

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

{926377200,926463600}

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

{926463600,926550000}

[(67, 48)]

{926550000,926636400}

[]

{926636400,926722800}

[]
{926722800,926809200}
...
我想要的是一个由逗号分隔的所有数字组成的向量。由于它们总是成对的,而且奇数行的数量每次都要大得多,这可以在以后通过逻辑加以区分


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

只需迭代每个字符。(使用fscanf或fread或其他方式)。如果字符是数字(使用str2num),则将其存储为数字;如果不是数字,则放弃该字符,并在遇到下一个数字时开始存储新的数字

您可以使用textscan完成此操作。您只需要将{}etc指定为空白

例如,如果将示例数据放入文件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

但是fscanf需要字符串的格式。我有点困惑如何使用它甚至扫描字符的字符,如何做到这一点?感谢SCANF(fid,'%s')。这将为您提供一个将所有字符放在一个长向量中的输出。然后,只需编写一个m文件,遍历描述上述操作的每个元素。可以不使用字符串标记器(“strtok”)吗?文本文件将如何馈送到标记器?谢谢你。它工作得很好。有一件事,由于某种原因,我在向量的末尾得到了一系列浮点数;你知道为什么吗?