在Matlab中使用textscan导入具有多个分隔符的数据

时间:2014-09-22 02:53:02

标签: matlab textscan

我正在尝试使用textscan从文本文件导入数据。数据有几个分隔符(冒号和空格)。我想将数据导入到具有137列的矩阵中。下面是两行数据及其所在的格式。

2 id:1 1:3 2:3 3:0 4:0 5:3 6:1 7:1 8:0 9:0 10:1 11:156 12:4 13:0 14:7 15:167 16:6.931275 17:22.076928 18:19.673353...134:1 135:0 136:2
9 id:2 1:4 2:3 3:1 4:5 5:3 6:4 7:2 8:0 9:0 10:1 11:16 12:42 13:0 14:7 15:167 16:5.7 17:1 18:3...134:2 135:6 136:3

这样有50条线,所以最后我想要一个50 x 136的矩阵。我想在冒号之后和空格之前抓取值,从1开始(1:31:4)并转到136(136:2136:3)。下面是我正在尝试的代码。我一直试图在做一些研究时发一些我发现的代码。我一直在阅读关于repmat的规格,看起来这只会产生1 x 136矩阵。

fid = fopen('./train.txt','r');
fmt = ['%f' repmat('%*f:%f', 1, 136)];
c = textscan(fid, fmt, 'CollectOutput', 1)

提前致谢,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

fmt进行少量修改,我认为这有效:

fmt = ['%f %s' repmat('%*d:%f', 1, 136)]

我将id添加为字符串,将冒号前的数字添加为整数(尽管似乎没有必要)。然后使用c{1}获取每行中的第一个数字,使用c{3}访问其他值的矩阵。