我有一些潮汐测量数据,我现在把它作为.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,因此输出错误。
我有更多的代码在我达到死胡同之前得到了进一步但我无法重现它
答案 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
将日期编号转换为任何字符串格式