【问题标题】:MATLAB: loading data with multiple types in single columnMATLAB:在单列中加载多种类型的数据
【发布时间】:2015-07-01 01:23:34
【问题描述】:

我有一些来自潮汐计的数据,我现在将其保存为 .csv 文件。我想将此数据加载到 MATLAB 中,因为我需要对其进行编辑。我对两列感兴趣,第一列是格式为 [dd/mm/yyyy hh:mm] 的日期和时间列,第二列是潮汐高程列。潮汐高程数据主要是 3 d.p 的数字。然而,一些数据有用作标志的字母。我不能使用 csvread 因为日期和时间格式所以我将其更改为 excel 中的数字(我希望将其保留为日期时间格式)但我不能使用 csvread 因为它不喜欢字母标志.我尝试使用 readtable 工作(日期为数字)但是我的潮汐高程数据卡在单元格中,因为 cell2mat 不起作用,因为由于字母,我以字符串格式读取高程数据。

我基本上想知道是否有一种更简单的方法可以将数据加载到 MATLAB 中,因为我现在正在做的事情真的很混乱。

样本数据:

28/01/1994 22:15    3.312
28/01/1994 22:30    3.057
28/01/1994 22:45    2.793
28/01/1994 23:00    2.541T
28/01/1994 23:15    2.303T
28/01/1994 23:30    2.083
28/01/1994 23:45    1.882

我尝试过的:

filename = 'C:\User\Documents\Tide_Data\Fish_all.csv';
fileID = fopen(filename);
data = textread(filename,'%{dd/MM/yyyy HH:mm}D %s');

格式字符串格式错误,所以我在 excel 中将日期更改为数字。

data = csvread(filename);

无法读取字母 T,因此输出错误。

在我走到死胡同之前我有更多的代码,但我无法重现它

【问题讨论】:

  • 您可能需要提供一些示例数据和您已有的代码,否则我们只是随机猜测解决方案。只是一个想法......
  • 抱歉,我在凌晨 2 点 30 分发布了这篇文章,既累又沮丧,我现在就编辑 OP。

标签: matlab


【解决方案1】:

我建议使用textscan 读取文件,然后将日期和时间字符串转换为datenum,如果字母存在与否,则将最后一列转换为双精度。

C = textscan(fileID,'%s %s %s');

% allocate
result = zeros(7,2);

for ii = 1:7   
   % current date string
   dateX = [C{1,1}{ii,1} C{1,2}{ii,1}];
   % current number
   numStr = C{1,3}{ii,1};

   if sum(numStr == 'T') > 0
       % remove char
       numStr = regexprep(numStr,'T','');
   end

   % collect
   result(ii,:) = [datenum(dateX, 'dd/mm/yyyyHH:MM'), str2double(numStr)];
end

然后您可以使用datestr 将日期数字转换为任何字符串格式

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2020-02-16
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多