【问题标题】:matlab - reading a table with different delimeter sizematlab - 读取具有不同分隔符大小的表格
【发布时间】: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) 而不是C{1, 1}{1, 1}
  • 你的第二个分配没有意义,我猜应该是C{1,1}(1,1)。表并不打算用作变量,而只是在将内容写入文件时用作方便的容器。正如我所说:除非您用空格填充,否则您的第一列和最后一列不能成为矩阵,我会始终将字符串保留在单元格中。中间三列当然可以使用cell2mat 转换为矩阵。
  • 可以调用 cell2table 从元胞数组中获取表格
  • cell2mat(C(:,2:4)) 有效,但我确实需要最后一列成为表格的一部分,因为最后我需要随机化行(包括最后一列)。

标签: matlab


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多