用MATLAB读取文本文件并逐行组织
我想读取一个文本文件(使用matlab),其中包含的数据不是方便的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} ... 我想要的是一个由逗号分隔的所有数字组成的向量。由于它们
{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”)吗?文本文件将如何馈送到标记器?谢谢你。它工作得很好。有一件事,由于某种原因,我在向量的末尾得到了一系列浮点数;你知道为什么吗?