MATLAB:在单列中加载多种类型的数据

时间:2015-07-01 01:23:34

标签: matlab

我有一些潮汐测量数据,我现在把它作为.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,因此输出错误。

我有更多的代码在我达到死胡同之前得到了进一步但我无法重现它

1 个答案:

答案 0 :(得分:0)

我建议您使用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

将日期编号转换为任何字符串格式