我在.xlsx
中有点数据,我想阅读并将它们存储在 Matlab 中的p
数组中。这些点仅是x
,y
,z
的 3D坐标,因此理解了三列而不是prdfined行。如果我需要快速检索,我试图检索.xlsx
并且其响应时间很慢并返回一个空数组,那么我如何从.csv
或.xlsx
检索它们。可能以换位形式存储它们并将其转置回来。
我的代码:.Xls阅读
A = xlsread('data.xlsx')
输出:
A =
[]
我的代码:.CSV阅读
M = csvread('data.csv')
输出:
Error using dlmread (line 139)
Mismatch between file and format string.
Trouble reading number from file (row 2u, field 1u) ==> ;\n
Error in csvread (line 48)
m=dlmread(filename, ',', r, c);
积分设置1:
-191.2442 187.7193 1.0000;
-155.2995 152.6316 2.0000;
-182.0276 104.6784 3.0000;
-148.8479 84.7953 4.0000;
积分集2:
-142.3963 83.6257 5.0000;
-102.7650 133.9181 6.0000;
-56.6820 164.3275 7.0000;
-30.8756 124.5614 8.0000;
-23.5023 118.7135 7.0000;
-9.6774 110.5263 6.0000;
26.2673 90.6433 5.0000;
-42.8571 -6.4327 4.0000;
10.5991 7.6023 3.0000;
积分3:
-73.2719 84.7953 9.0000;
-137.7880 15.7895 10.0000;
-92.6267 -30.9942 9.0000;
-42.8571 19.2982 8.0000;
41.0138 -15.7895 4.0000;
71.4286 -41.5205 6.0000;
90.7834 -14.6199 5.0000;
答案 0 :(得分:1)
查看使用importdata
的稍微扭曲的那个是否适合你 -
C1 = importdata(file1) %%// file1 is your CSV filename
t1 = regexp(C1,'\s','Split')
t2 = horzcat(t1{:})
t2 = strrep(t2,';','')
M = cellfun(@str2num,reshape(t2(~strcmp(t2,'')),3,[])')
编辑1:此案例假设您有一个CSV
文件,其中所有Point Sets
已聚集在一起但逐一({{}之间没有空格1}}及其数据以及Point Sets
的结尾与下一个Point Set
的到达声明之间。
因此,对于问题中的给定数据,输入CSV文件看起来像这样 -
Point Set
请注意,代码的结果将是数组的结构。
<强>代码强>
Points Set 1:
-191.2442 187.7193 1.0000;
-155.2995 152.6316 2.0000;
-182.0276 104.6784 3.0000;
-148.8479 84.7953 4.0000;
Points Set 2:
-142.3963 83.6257 5.0000;
-102.7650 133.9181 6.0000;
-56.6820 164.3275 7.0000;
-30.8756 124.5614 8.0000;
-23.5023 118.7135 7.0000;
-9.6774 110.5263 6.0000;
26.2673 90.6433 5.0000;
-42.8571 -6.4327 4.0000;
10.5991 7.6023 3.0000;
Points Set 3:
-73.2719 84.7953 9.0000;
-137.7880 15.7895 10.0000;
-92.6267 -30.9942 9.0000;
-42.8571 19.2982 8.0000;
41.0138 -15.7895 4.0000;
71.4286 -41.5205 6.0000;
90.7834 -14.6199 5.0000;
答案 1 :(得分:0)
您正在使用行分隔符;\n
(分号+新行)。我不知道任何函数理解这种格式。使用texstscan
可能是最好的选择:
fid=fopen(...)
M=cell2mat(textscan(line,'%f,%f,%f;\n'));
fclose(fid);