2015-07-01 26 views
0

我有一些来自潮汐测量仪的数据,我现在把它作为一个.csv文件。我想将这些数据加载到MATLAB中,因为我需要编辑它。有两列我感兴趣,第一列是日期格式为[dd/mm/yyyy hh:mm]的时间列&,第二列是潮汐高程列。潮汐高程数据主要是数字到3 d.p.然而一些数据有用作标志的字母。我不能使用csvread因为日期&时间格式,所以我将其更改为在Excel中的数字(我宁愿保持它在日期时间格式),但我则是因为它没有像字母标志不能使用csvread 。我尝试使用可读取的工作表(日期为数字),但是我的潮汐高程数据卡在单元格中,因为cell2mat不起作用,因为我以字母的形式读取字符串格式的高程数据。MATLAB:在单列中加载多种类型的数据

我基本上会想知道是否有更简单的方式来获得加载到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

你可能想提供一些示例数据,你已经有代码的任何字符串格式,否则我们只是在猜测解随机。只是一个想法... – excaza

+0

对不起,我已经在凌晨2:30发布了这个,感觉很累,很沮丧,我现在编辑OP。 – deiniol

回答

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