Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中读取Excel文件并创建数组_Matlab - Fatal编程技术网

在MATLAB中读取Excel文件并创建数组

在MATLAB中读取Excel文件并创建数组,matlab,Matlab,我有一个将坐标导出到xls文件的软件,现在我想在MATLAB中创建一个函数,该函数使用该xls文件,但不希望更改原始软件,因此xls文件必须保持相同的格式 我目前正在使用代码 FILE = 'KEN FILE2.xls'; [NUM,TXT,RAW]=xlsread(FILE); xArray = cell2mat(RAW(:,1)) yArray = cell2mat(RAW(:,2)) 这还不够好,因为我的excel文件如下所示: 1 2 2 2.1 3 2.

我有一个将坐标导出到xls文件的软件,现在我想在MATLAB中创建一个函数,该函数使用该xls文件,但不希望更改原始软件,因此xls文件必须保持相同的格式

我目前正在使用代码

FILE = 'KEN FILE2.xls';
[NUM,TXT,RAW]=xlsread(FILE);
xArray = cell2mat(RAW(:,1))
yArray = cell2mat(RAW(:,2))
这还不够好,因为我的excel文件如下所示:

 1     2
 2     2.1
 3     2.2  
 4     2.3


 Value of ken 
 27
由于A列中的文本是代码所覆盖的,我显然可以手动编辑excel文件,这样我上面的代码就可以工作了,但我更希望有一个代码来处理这个问题


有什么想法吗?

您可能会找到使用ismember切断单元阵列的位置:

代码-


假设读作NaN和27的最后两行是注释,并由两个被称为NaN的空行分隔:


在示例输入中,A列末尾有27,B列中没有任何内容。因此,是否希望将27添加到xArray?如果是这样,那么yArray中相应的元素呢?no 27不需要在数组中。我尝试了最后一个代码选项,它使我的x和y数组为空。我想在excel工作表的第三列或更高列中有一些非空单元格。所以,使用RAW=RAW:,1:2;就在xlsread行之后。是的,但现在涉及27,我希望数组在空格之前的最后一个值上结束。因此,在本例中,它将以4Just edited结束。让我们知道它现在是否适用于您的新需求!
%//example data
a = {'1';'2';'3';'4';'';'value'};

last = find(ismember(a,''),1)-1;
a_new = a(a:last);
%%// Read excel file
[NUM,TXT,RAW]=xlsread(FILE);

%// Use this if you think that there might be non-empty cells on third or later 
%// columns, which you do not want to consider.
RAW = RAW(:,1:2); 

%%// Main processing starts now
RAW(cellfun(@ischar,RAW)) = {NaN};
out = cell2mat(RAW);

%%// Use this if you are okay with having NaNs to replace non-numeric data
%RAW = RAW(find(any(out,2)),:); 

%%// Use this if you want to replace all rows having any non-numeric data in them
RAW = RAW(find(all(~isnan(out),2)),:);

%// Use this if you want to stop data import at the first instance of
%// non-numeric data in any row of any column
RAW = RAW(1:find(any(isnan(out),2),1,'first')-1,:); 

%%// Output arrays
xArray = cell2mat(RAW(:,1))
yArray = cell2mat(RAW(:,2))
[NUM,TXT,RAW]=xlsread(FILE);
[m,n]=size(NUM);
% drop off 4 last lines
xArray(:,1)=NUM(1:m-4,1);
yArray(:,1)=NUM(1:m-4,2);
%clean mess
clear NUM TXT RAW m n