使用horzcat时出错 - textscan - 导入到matlab

时间:2016-05-16 07:12:17

标签: matlab csv

我在csv文件中有大表我想导入到matlab。 我的数据看起来像这样

2015-08-19 13:07:06,2015-08-20 00:00:00,0,0,2,2,97,74089906202417,96140046618,117409555595550,2,0,1

我试图使用:

dataArray = textscan(fileID, '%{yyyy-MM-dd hh:mm:ss}D%{yyyy-MM-dd hh:mm:ss}D%u%u%u%u%d%u64%u64%u64%u%u64%u', 'Delimiter', ',', 'WhiteSpace', '',  'ReturnOnError',  false);
fclose(fileID);
a = [dataArray{1:end}];
clearvars

但是由于数据类型不匹配,它无法正常工作,这个错误

  

使用horzcat时出错   连接的矩阵的尺寸不一致。   a = [dataArray {1:end}];

中的错误

现在有人能告诉我如何导入这些数据??? (datetime列对我来说非常重要,可以正确导入)

注意:我尝试了以下所有格式,但仍然有错误。

  
      
  • 'datenum(%d)datenum(%d)%U%U%U%U%d%U64%U64%U64%U%U64%的u';
  •   
  • '%s%s%u%u%u%u%d%u64%u64%u64%u%u64%u';
  •   
  • '%f64%f64%f64%f64%f64%f64%f64%f64%f64%f64%f64%f64%f64'
  •   
  • '%s%s%f64%f64%f64%f64%f64%f64%f64%f64%f64%f64%f64'
  •   

1 个答案:

答案 0 :(得分:1)

下面提供了更正后的代码。在代码中,如果不需要,则不必存储到数组。您可以像dataArray那样访问dataArray{2}(5)中的每个元素。在这种情况下,您将获得csv文件中second date and time中的5th line

我使用%s代替%u64 74089906202417,96140046618,117409555595550,因为

  

74089906202417适合%u64

     

96140046618将适合%u64

     

117409555595550不适合117409555595550

考虑到其他两个也可能不适合csv文件的其他行,我使用%s来表示所有这三个文件。您可以根据数据进行更改。

fileID = fopen('data.csv');
dataArray = textscan(fileID,'%s %s %u %u %u %u %d %s %s %s %u %u %u','Delimiter',',');
fclose(fileID);

% Storing to array
dateTime1 = cell2mat(dataArray{1});
dateTime2 = cell2mat(dataArray{2});
uinteger1=dataArray{3};
uinteger2=dataArray{4};
uinteger3=dataArray{5};
uinteger4=dataArray{6};
integer1=dataArray{7};
string1=cell2mat(dataArray{8});
string2=cell2mat(dataArray{9});
string3=cell2mat(dataArray{10});
uinteger5=dataArray{11};
uinteger6=dataArray{12};
uinteger7=dataArray{13};