matlab - 读取具有不同分隔符大小的表格
Posted
技术标签:
【中文标题】matlab - 读取具有不同分隔符大小的表格【英文标题】:matlab - reading a table with different delimeter size 【发布时间】:2016-03-15 16:55:33 【问题描述】:我有一张这样的桌子:
a 0.31 0.61 0.23 abc
abc 0.53 0.41 0.98 a
我尝试使用以下方法读取表格:
C = textscan(fileID,'%s%f%f%f%s','Delimiter',' ','MultipleDelimsAsOne',1);
它创建 5 列,每列是一个单元格。 我需要它是一个表格(每列应该有单元格行的长度)
我还尝试使用以下方法读取文件:
readtable('file')
但它给了我不同分隔符大小的错误
【问题讨论】:
第一列和最后一列必须是一个单元格,因为它们包含大小不等的字符串。如果您坚持要有一张桌子,请使用table
,在使用textscan
阅读它之后。
但是如何将C
(textscan 之后的变量)中的单元格转换为表格的一部分?基本上我想像这样访问第一行和第一列:C(1,1)
而不是C1, 11, 1
你的第二个分配没有意义,我猜应该是C1,1(1,1)
。表并不打算用作变量,而只是在将内容写入文件时用作方便的容器。正如我所说:除非您用空格填充,否则您的第一列和最后一列不能成为矩阵,我会始终将字符串保留在单元格中。中间三列当然可以使用cell2mat
转换为矩阵。
可以调用 cell2table 从元胞数组中获取表格
cell2mat(C(:,2:4))
有效,但我确实需要最后一列成为表格的一部分,因为最后我需要随机化行(包括最后一列)。
【参考方案1】:
也许:
t = readtable('blah.txt','Format','%s%f%f%f%s','Delimiter',' ','MultipleDelimsAsOne',1);
顺便说一句,readtable 基本上是 textscan 的包装器。如果您不想将第一行作为变量名读取,可以使用以下命令将该选项设置为 false:
t = readtable('blah.txt','Format','%s%f%f%f%s','Delimiter',' ','MultipleDelimsAsOne',1,'ReadVariableNames',false);
【讨论】:
以上是关于matlab - 读取具有不同分隔符大小的表格的主要内容,如果未能解决你的问题,请参考以下文章