我在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'
答案 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};