【问题标题】:Reading CSV file in matlab [duplicate]在matlab中读取CSV文件[重复]
【发布时间】:2013-04-06 21:06:10
【问题描述】:

我有一个类似这种格式的 csv 文件:

2.3 , 1.3 , 1.2 , 6.8 , classone
1.2 , 2.6 , 1.8 , 0.7 , classtwo

我想将文件读入单独的矩阵;一个矩阵中的前 4 个数值和另一个矩阵中的字符串值

我尝试过 textscan 功能,但效果不佳

M= textread('training.dat','%f %f %f %f %s');

Error using dataread
Number of outputs must match the number of unskipped
input fields.

【问题讨论】:

  • 你见过csvread函数吗?不确定您是否可以使用此获取字符串数据...
  • @Eitan T 确实,差别不大。唯一的技巧是在字段分隔符中考虑逗号周围的空格。

标签: matlab csv


【解决方案1】:

试试  

[num, str, ~] = xlsread('training.dat');

fid = fopen('training.dat');
D = textscan(                                ...
        fid,                   '%f%f%f%f%s', ...
        'Delimiter',           ' , ',        ...
        'MultipleDelimsAsOne', true          ...
);
fclose(fid);

numeric_stuff = horzcat(D{1:4});
string_stuff  = D{5};

【讨论】:

  • 感谢您的帮助,但它给了我两个矩阵:num 为 0 元素,str 为单元格数组,每个单元格包含五个元素,没有分隔数字和字符串
  • 好吧,这……出乎意料。我会带着别的东西回来,让我先试试吧。
  • @Peace 好的,我尝试了其他方法,以处理逗号周围的那些特殊空格...我在示例中提供的数据上工作正常。请注意,如果您坚持将字符串作为矩阵而不是元胞数组,则可以始终将char() 应用于字符串元胞数组。
  • @Peace:那么您显示的格式与您粘贴的格式不完全相同。如果我将您的示例数据复制粘贴到文本文件 training.dat 中,我可以简单地使用 CST-Link 的代码,它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 2016-02-22
  • 2013-06-23
  • 1970-01-01
  • 2017-05-01
相关资源
最近更新 更多