【问题标题】:MATLAB csvread: Specifying a range with only numeric data but adjacent cells on the right contain textMATLAB csvread:指定仅包含数字数据但右侧相邻单元格包含文本的范围
【发布时间】:2014-11-28 01:54:53
【问题描述】:

我有一个格式如下的 csv:

样本编号 日期/时间 CHANNEL0 CHANNEL1 CHANNEL2 CHANNEL3 事件 1 2014 年 11 月 26 日 04:10:21.3349 PM 0.4643 -2.3232 -3.7053 -1.78 数据采集开始 2 2014 年 11 月 26 日 04:10:21.3350 下午 0.5489 -2.3226 -3.7047 -1.7836 3 2014 年 11 月 26 日 04:10:21.3351 下午 0.6316 -2.3217 -3.7035 -1.7833 4 2014 年 11 月 26 日 04:10:21.3352 下午 0.7137 -2.3211 -3.7023 -1.7827 . . . 35675 11/26/2014 04:10:21.3349 PM 0.4643 -2.3232 -3.7053 -1.78 数据采集停止

我想一次性将这些数据读入 Matlab。我正在尝试使用具有以下范围的 csv 读取:

date = csvread('file.csv', 1, 2, [1, 2, 35674, 5])

但每次我尝试这样做时都会收到错误:

Error using dlmread (line 138)
Mismatch between file and format string.
Trouble reading number from file (row 1u, field 7u) ==> DAQ Start\n
Error in csvread (line 49)
    m=dlmread(filename, ',', r, c, rng); 

(注意:文件中还有一些其他的标题,但这些无关紧要,问题是这个“DAQ Start”框)

我不明白为什么 csvread 的文本出现问题,它超出了右侧的指定范围。指定范围实际上不会导致它只读取该范围吗?

我可以补充一点,如果我将行偏移量增加一,这样我就不会读取带有 DAQ 文本的行,而只读取倒数第二行,那么它就可以工作。每当我尝试用这些额外的文字阅读任何一行时,都会感到不安。我可以用 textscan 把一些东西放在一起,但我认为这不会那么干净,因为我需要分别阅读第一行和最后一行。有什么方法可以使用 csvread 进行这项工作?

编辑:我包含数据的方式缺少逗号,我知道。但请放心,这是一个 csv。

【问题讨论】:

  • 也许可以试试textscan

标签: matlab csv


【解决方案1】:

您可以使用importdata 函数并删除不重要的列:

imported = importdata ('file.csv', ' ', 1)
data = imported.data
parts = data(:,[1:3 5:8])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多